MFC自定义消息等等[参照].pdfVIP

  • 1
  • 0
  • 约3.22万字
  • 约 24页
  • 2021-10-19 发布于福建
  • 举报
MFC中自由使用自定义消息 消息映射、循环机制是 Windows程序运行的基本方式。 VC++ MFC中有许多 现成的消息句柄, 可当我们需要完成其它的任务, 需要自定义消息, 就遇到了一 些困难。 在 MFCClassWizard 中不允许添加用户自定义消息, 所以我们必须在程序中 添加相应代码, 以便可以象处理其它消息一样处理自定义消息。 通常的做法是采 取以下步骤 : 第一步 : 定义消息。 推荐用户自定义消息至少是 WM_USER+100,因为很多新控件也要使用 WM_USER 消息。 #define WM_MY_MESSAGE (WM_USER+100) 第二步 : 实现消息处理函数。 该函数使用 WPRAM和 LPARAM参数并返回 LPESULT。 LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { // TODO: 处理用户自定义消息 ... return 0; } 第三步 : 在类头文件的 AFX_MSG块中说明消息处理函数 : class CMainFrame:public CMDIFrameWnd { ... // 一般消息映射函数 protected: // {{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnTimer(UINT nIDEvent); afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //}}AFX_MSG DECLARE_MESSAGE_MAP() } 第四步 : 在用户类的消息块中,使用 ON_MESSAGE宏指令将消息映射到消息处理 函数中。 BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_WM_TIMER() ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage) //}}AFX_MSG_MAP END_MESSAGE_MAP() 如果用户需要一个定义整个系统唯一的消息 , 可以调用 SDK函数 RegisterWindowMessage 定义消息 : static UINT WM_MY_MESSAGE=RegisterWindowMessage(User); 并使用 ON_REGISTERED_MESSAGE宏指令取代 ON_MESSAGE宏指令 , 其余步骤同 上。 当需要使用自定义消息时 , 可以在相应类中的函数中调用函数 PostMessage 或 SendMessage发送消息 PoseMessage(WM_MY_MESSAGE,O,O); 如果向其他进程发送消息可通过如下方法发送消息 : DWORD result; SendMessageTimeout(wnd-m_hWnd, // 目标窗口 WM_MY_MESSAGE, // 消息 0, // WPARAM 0, // LPARAM SMTO_ABORTIFHUNG | SMTO_NORMAL, TIMEOUT_INTERVAL, result); 以避免其它进程如果被阻塞而造成系统死等状态。 可是如果需要向其它类 ( 如主框架、子窗口、视类、对话框、状态条、工具 条或其他控件等发送消息时上述方法显得无能为力, 而在编

文档评论(0)

1亿VIP精品文档

相关文档