`
muw76muw
  • 浏览: 12963 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

消息处理函数

阅读更多

消息处理函数
2010年07月10日
   消息处理函数
    消息处理函数又叫窗口过程,在这个函数中,不同的消息将用switch语句分配到不同的处理程序中去。Windows的消息处理函数都有一个确定的样式,即这种函数的参数个数和类型以及其返回值的类型都有明确的规定。在VC的说明书中,消息处理函数的原型是这样定义的:
  LRESULT CALLBACK WindowProc(
  HWND hwnd, //接收消息窗口的句柄
  UINT uMsg, //主消息值
  WPARAM wParam, //副消息值
  LPARAM lParam //副消息值
  );
    如果你的程序中还有其它的消息处理函数,也都必须按照上面的这个样式来定义,但函数名称可以随便取。EasyWin中的WinProc()函数就是这样一个典型的消息处理函数。
    消息处理函数的四个参数是由GetMessage()函数从消息队列中获得MSG结构,然后分解后得到的。第二个参数uMsg和MSG结构中的message值是一致的,代表了主消息值。程序中用switch语句来将不同类型的消息分配到不同的处理程序中去。
    WinProc()函数明确的处理了4个消息,分别是WM_KEYDOWN(击键消息)、WM_RBUTTONDOWN(鼠标右键按下消息)、WM_PAINT(窗口重画消息)、WM_DESTROY(销毁窗口消息)。
    值得注意的是,应用程序发送到窗口的消息远远不止以上这几条,象WM_SIZE、WM_MINIMIZE、WM_CREATE、WM_MOVE等这样频频使用的消息就有几十条。为了减轻编程的负担,Windows的API提供了DefWindowProc()函数来处理这些最常用的消息,调用了这个函数后,这些消息将按照系统默认的方式得到处理。
    因此,在switch_case语句中,只须明确的处理那些有必要进行特别响应的消息,把其余的消息交给DefWindowProc()函数来处理,是一种明智的选择,也是你必须做的一件事。
   
    结束消息循环
    当用户按Alt+F4或单击窗口右上角的退出按钮,系统就向应用程序发送一条WM_DESTROY的消息。在处理此消息时,调用了PostQuitMessage()函数,该函数会给窗口的消息队列中发送一条WM_QUIT的消息。在消息循环中,GetMessage()函数一旦检索到这条消息,就会返回FALSE,从而结束消息循环,随后,程序也结束。
    小结
    本章介绍的是Win32编程的基础知识,在进行DirectX编程之前,掌握它们是十分必要的。
    通过本文的学习,你应该学到以下知识:
     如何创建一个Win32应用程序工程
     用RegisterClass()函数注册一个窗口类,再立即调用CreateWindow()函数创建一个窗口的实例
     设置窗口的类型以及将一个消息处理函数与窗口联系上
     用一固定的模式开启消息循环
     了解消息处理函数的定义规则,如何自己定义一个窗口消息处理函数
     在消息处理函数中,最后必须调用DefWindowProc()函数以处理那些缺省的消息
     调用PostQuitMessage()函数以结束消息循环
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics