精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究
人是社交动物,软件也是群体协调机制,怎么进行协调,从底层硬件的总线和中断机制,一直到QQ和微信消息,都是一种通知,操作系统管理通知,在特别的场合下叫消息,消息有产生、投递和处理,处理过后,消息就没有了。
当有消息产生时,操作系统会把这条消息放到应用程序的消息队列中,应用程序通过GetMessage 函数从这个队列中取出一条具体的消息,并通过DispatchMessage函数把消息交给操作系统,后者调用应用程序的窗口过程,即窗口过程函数WndProc进行处理。该函数利用switch-case结构来对消息进行判别并分类处理。
当我为对话框类添加一个鼠标左键按下这一消息相应函数之后,源文件中会增加下述三处代码。
在ControlCardDlg类的头文件中,新增如下代码
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
在ControlCardDlg类的源文件中,新增如下红色标记代码
BEGIN_MESSAGE_MAP(CControlCardDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT10, &CControlCardDlg::OnEnChangeEdit10)
ON_NOTIFY(UDN_DELTAPOS,IDC_SPIN11,&CControlCardDlg::OnDeltaposSpin11)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()这两个宏之间定义了该类的消息映射表,其中新增的这个映射宏,能够将鼠标左键按下消息与一个消息响应函数关联起来,通过这个机制,一旦有消息产生,程序就会调用响应的消息响应函数来进行处理。
在ControlCardDlg类的源文件中,新增函数定义代码部分
void CControlCardDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnLButtonDown(nFlags, point);
}
通过我们在mfc项目中添加一个消息,我们发现,mfc项目只要遵照上述步骤,定义了与消息有关的三处信息后,就可以实现消息的响应处理。MFC中采用的这种消息处理机制称为MFC消息映射机制。
Windows消息机制是Win32模式,C语言模式,而MFC的消息处理机制虽然以C模式为多,但是用在了C++面向对象环境里。Win32模式可以理解为底层,MFC的可以理解为应用层。