Windows程序内部运行机制介绍
来源:优易学  2011-11-30 17:52:15   【优易学:中国教育考试门户网】   资料下载   IT书店

  五、显示及更新窗口 -- ShowWindow 函数

  原型

  Bool ShowWindow(

  HWND hwnd, // 创建窗口后返回哪个窗口句柄。

  int nCmdshow // 用来指定窗口显示状态。

  );

  nCmdShow 参数一般为:

  SW_HIDE -- 隐藏并激活其他窗口        SW_SHOW --窗口原位置 以原来尺寸激活和显示窗口

  SW_SHOWMAXIMIZED -- 激活窗口并将其最大化显示

  SW_SHOWMINIMIZED -- 激活窗口并将其最小化显示

  SW_SHOWNORMAL    -- 激活并显示窗口 -- 窗口最小化或最大化状态 系统其恢复原来尺寸和大小。

  更新窗口 -- updateWindow来刷新窗口

  原型

  Bool updateWindow(

  HWHD hwndl;// 指创建成功后的窗口句柄

  ) updateWindow 函数通过发送一个WM_PAINT 消息来刷新窗口

  updateWindow 将WM_PAINT消息直接发送给窗口过程函数进行处理,而没放到我们前面所说的消息队列中。

  六、消息循环 -- GetMessage函数

  原型:

  Bool Getmessage(

  LPMSG lpmsg, // 指向一个消息结构体 -- 将消息队列中信息保存在结构体对象中。

  HWND   hwnd, // 接收属于哪个窗口消息,通常设置NULL接收属于调用线程所有窗口的窗口消息

  UINT WMsgFiltermin, // 获取消息最小值,设为0接收所有消息。

  UINT WMsgFiltermax // 获取消息最大值,设为0接收所有消息。

  );

  GetMessage 接收除WM_QUIT外消息的非零值,对于WM_QUIT消息函数返回零,如果出现错误,

  函数直接返回-1

  MSG msg;

  while (GetMessage(&msg,null,0,0))

  {

  Translatemessage(&msg);   // 用于将虚拟键消息转换为字符消息

  Dispatchmessage(&msg);   // 分配一个消息到窗口过程,窗口过程函数对消息进行处理

  }

  七、编写窗口过程函

  LRESULT CALLBACK WinSunProc(

  HWND hwnd,      // 窗口句柄

  UINT uMsg,      // 消息代码

  WPARAM wParam, // 第一条消息参数

  LPARAM lParam   // 第二条消息参数

  );

  {

  switch(uMsg)

  {

  case WM_CHAR:     // 用户按下字符键时...收到WM_CHAR消息通过Translatemessage函数转换ASCII值。

  char szChar[20];

  sprintf(szChar,"char code is %d",wParam);

  MessageBox(hwnd,szChar,"char",0);

  break;

  case WM_LBUTTONDOWN: // 接收窗口按下鼠标左键 会产生 WM_LBUTTONDOWN 消息.

  MessageBox(hwnd,"mouse clicked","message",0);

  HDC hdc;

  hdc=GetDC(hwnd);

  TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));

  //ReleaseDC(hwnd,hdc);

  break;

  case WM_PAINT:   // 对 WM_PAINT 消息进行处理。当窗口客户区部分或全部无效时,系统发生 WM_PAINT 消息

  // 通知应用程序重新绘制窗口。

  HDC hDC;

  PAINTSTRUCT ps;

  hDC=BeginPaint(hwnd,&ps);

  TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));

  EndPaint(hwnd,&ps);

  break;

  case WM_CLOSE:   // 用户点击关闭按钮时 系统会接收 WM_CLOSE

  if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))

  {

  DestroyWindow(hwnd); // 当用户在对话框上选择 是时~~会调用DestroyWindow销毁窗口。

  }

  break;

  case WM_DESTROY:   // 要想让程序正常退出,必须响应 WM_DESTROY 消息~~并在消息代码中调用 PostQuitMessage 函数

  PostQuitMessage(0);

  break;

  default:

  return DefWindowProc(hwnd,uMsg,wParam,lParam); // 函数调用默认的窗口过程,对程序没有处理的其他消息提供默认处理。

  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训