使用MFC创建一个对话框的按钮,为什么他的相应函数是
void CmyDlg::OnBnClickedButton1()
对话框如何知道鼠标点在按钮里面而不是:
CButton mybutton;
void mybutton::OnBnClickedButton1()MFC对话框消息响应
void CmyDlg::OnBnClickedButton1()
对话框如何知道鼠标点在按钮里面而不是:
CButton mybutton;
void mybutton::OnBnClickedButton1()MFC对话框消息响应
是谁接收了消息?是按钮还是按钮所在的窗口?
是按钮所在的窗口接收到了这个消息(因为按钮窗口在创建的时候有个WS_CHILD风格)。
下面说一下消息是怎么发出来的
当你点了按钮之后,windows的底层kernal就会判断你对窗口做了什么操作
然后封一个消息结构体包括四个参数:接收窗口的句柄、消息的宏(标识消息的一个整数)、参数一、参数二
并把这个消息投递到消息队列中
你所看到的void CmyDlg::OnBnClickedButton1()
已经是消息到达指定接收窗口的具体处理函数了
MFC所做的就是把这个消息和对应的消息处理函数连接起来
这里面就是消息映射的内容了,东西太多,这里回答不全,具体你可以看windows程序设计、孙鑫vc、还有侯捷的深入浅出、以及好多英文的关于MFC的教材
ON_BN_CLICKED(IDC_BUTTON1, &CMFCDlg::OnBnClickedButton1)
就是把按钮给父窗口的通知消息映射到对话框的OnBnClickedButton1函数去处理。这样不是简单么,你不需要绑定按钮到一个类,只需要在对话框处理就是了。否则界面上有100个控件就要100个类去处理,烦死了。