Windows 程序内部运行机制

发表于:2009-11-30 11:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:

  六、消息循环 -- 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); // 函数调用默认的窗口过程,对程序没有处理的其他消息提供默认处理。
  }

33/3<123
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号