MFC消息机制初级心得

来源:互联网 发布:log4j配置sql语句 编辑:程序博客网 时间:2024/06/05 19:47

在Windows编程中,与以往的面向过程的DOS程序中最大的不同是,Window采用的是消息驱动机制,即程序中的事件都是由消息来驱动的。

消息机制的实现如:

在本例中我们调用线程完成http发送任务,等待线程任务结束,发送消息给主线程,等待对话框响应显示任务完成信息字样。

1,首先在global.h文件中定义宏 WM_UPDATE_MSG 用来表示数据更新

//File  global.h

#define WM_UPDATE_MSGWM_USER+5

2,在对话框类头文件中添加用来消息响应成员函数

LRESULT OnUpdateState(WPARAM wParam, LPARAM lParam);

并在cpp文件中实现消息响应函数

LRESULT CAlterParamDlg::OnUpdateState(WPARAM wParam, LPARAM lParam)
{
SetState((int)wParam);
return 0;
}

3,在对话框类cpp文件中添加消息映射如红色字体,表示对于消息WM_UPDATE_MSGOnUpdateState()函数响应

//FILE dialog.cpp

BEGIN_MESSAGE_MAP(CAlterParamDlg, CDialog)   //消息--动作 映射表
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP                
ON_BN_CLICKED(IDOK, OnBnClickedAlter)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
ON_MESSAGE(WM_UPDATE_MSG, OnUpdateState)     //消息绑定  前者发生调用后者响应
ON_WM_DESTROY()
END_MESSAGE_MAP()

4,在线程执行体结束位置调用消息发送函数发送消息

AfxGetApp()->GetMainWnd()->GetSafeHwnd()用于获取主窗口句柄

::SendMessage(AfxGetApp()->GetMainWnd()->GetSafeHwnd(), WM_UPDATE_MSG, (WPARAM)2, NULL);

翻译为:向句柄为AfxGetApp()->GetMainWnd()->GetSafeHwnd()的窗口发送WM_UPDATE_MSG消息,参数为WPARAM)2, NULL