VC++ MFC:详析各类WM消息及其应用

5星 · 超过95%的资源 需积分: 9 8 下载量 65 浏览量 更新于2024-10-09 收藏 219KB DOC 举报
在Visual C++ (VC++) 的MFC(Microsoft Foundation Classes)框架中,消息(Message)是应用程序与操作系统之间通信的关键机制。WM消息是一系列预定义的整数值,它们代表了不同的事件或请求,Windows窗口处理这些消息以响应用户的操作或者系统状态的变化。下面将详细介绍部分关键WM消息及其在MFC中的使用。 1. **WM_NULL** ($0000): 这是第一个Windows消息,通常用于初始化和清理过程,表示没有特定的操作发生。 2. **WM_CREATE** ($0001): 当应用程序创建一个新的窗口时,操作系统会发送此消息。在MFC中,这通常与CWnd::Create()方法关联,用于初始化窗口对象。 3. **WM_DESTROY** ($0002): 窗口被销毁时,操作系统会发送此消息,这时开发者应释放窗口相关的资源,如CWnd的删除操作。 4. **WM_MOVE** ($0003) 和 **WM_SIZE** ($0005): 分别表示窗口的位置或大小发生改变。在MFC中,可以监听这些消息以更新窗口布局或响应用户的窗口拖动和缩放操作。 5. **WM_ACTIVATE** ($0006): 用于控制窗口的激活状态。当窗口由非活动变为活动或者反之,操作系统会发送此消息。MFC中的CWnd::OnActivate()函数处理这类事件。 6. **WM_SETFOCUS** ($0007) 和 **WM_KILLFOCUS** ($0008): 分别表示窗口获得了焦点(接收键盘输入)或失去了焦点。这对于处理焦点切换和键盘输入响应非常重要。 7. **WM_ENABLE** ($000A): 改变窗口的启用状态,允许或禁止用户交互。MFC中的EnableWindow()函数可以处理这种操作。 8. **WM_SETREDRAW** ($000B): 设置窗口是否允许重绘。这对于优化性能,如在动画或计算密集型操作期间暂停重绘,非常有用。 9. **WM_SETTEXT** ($000C) 和 **WM_GETTEXT** ($000D): 前者用于设置窗口的文本内容,后者用于获取窗口的文本。在MFC中,CWnd::SetWindowText() 和 CWnd::GetWindowText() 方法分别用于实现这些功能。 10. **WM_GETTEXTLENGTH** ($000E): 获取窗口内文本的长度,这对于预先分配缓冲区空间以便接收WM_GETTEXT消息的内容非常有用。 11. **WM_PAINT** ($000F): 当窗口需要重新绘制时,如用户触发绘图事件或窗口大小变化,操作系统会发送此消息。MFC提供OnPaint() 函数处理窗口重绘。 12. **WM_CLOSE** ($0010): 用户尝试关闭窗口时,操作系统发送此消息。开发者需处理OnClose() 函数来响应关闭请求。 13. **WM_QUERYENDSESSION** 和 **WM_ENDSESSION**: 分别在用户想要退出系统或应用程序结束前发送。在MFC中,可能需要处理这些消息来保存数据并优雅地退出。 14. **WM_QUIT** ($0012): 应用程序或系统调用postquitmessage()函数时,向消息队列发送此消息,以通知程序应该退出。 15. **WM_QUERYOPEN** ($0013): 当窗口恢复到先前大小和位置时,发送此消息给图标,常用于恢复最小化窗口。 16. **WM_ERASEBKGND** ($0014): 当窗口需要清除其背景时,例如窗口调整大小,发送此消息。 17. **WM_SYSCOLORCHANGE** ($0015): 当系统颜色更改时,如主题更改,此消息通知窗口更新外观。 18. **WM_SHOWWINDOW** ($0018): 控制窗口的可见性,隐藏或显示。 19. **WM_ACTIVATEAPP** ($001C): 指示应用程序中哪个窗口是活动的,有助于管理窗口之间的焦点切换。 20. **WM_FONTCHANGE** ($001D): 字体资源库发生变化时发送,提醒窗口更新字体显示。 21. **WM_TIMECHANGE** ($001E): 时间变更时发送,用于同步窗口时间显示。 22. **WM_CANCELMODE** ($001F): 取消当前正在进行的操作,例如在处理某个任务时,用户取消请求。 了解和熟练掌握这些WM消息对于在VC++中开发Windows应用程序至关重要,它们帮助开发者实现与用户的交互、窗口管理、图形界面响应等功能。通过监听和处理这些消息,能够编写出更高效、用户友好的应用程序。