在Windows编程中,与以往的面向过程的DOS程序中最大的不同是,Window采用的是消息驱动机制,即程序中的事件都是由消息来驱动的。
消息机制的实现如:
在本例中我们调用线程完成http发送任务,等待线程任务结束,发送消息给主线程,等待对话框响应显示任务完成信息字样。
1,首先在global.h文件中定义宏 WM_UPDATE_MSG 用来表示数据更新
//File global.h
#define WM_UPDATE_MSG WM_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_MSG用OnUpdateState()函数响应
//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