使用MFC创建一个对话框的按钮,为什么他的相应函数是
void CmyDlg::OnBnClickedButton1()
对话框如何知道鼠标点在按钮里面而不是:
CButton mybutton;
void mybutton::OnBnClickedButton1()MFC对话框消息响应

解决方案 »

  1.   

    首先你要明白一个问题
    是谁接收了消息?是按钮还是按钮所在的窗口?
    是按钮所在的窗口接收到了这个消息(因为按钮窗口在创建的时候有个WS_CHILD风格)。
    下面说一下消息是怎么发出来的
    当你点了按钮之后,windows的底层kernal就会判断你对窗口做了什么操作
    然后封一个消息结构体包括四个参数:接收窗口的句柄、消息的宏(标识消息的一个整数)、参数一、参数二
    并把这个消息投递到消息队列中
    你所看到的void CmyDlg::OnBnClickedButton1()
    已经是消息到达指定接收窗口的具体处理函数了
    MFC所做的就是把这个消息和对应的消息处理函数连接起来
    这里面就是消息映射的内容了,东西太多,这里回答不全,具体你可以看windows程序设计、孙鑫vc、还有侯捷的深入浅出、以及好多英文的关于MFC的教材
      

  2.   

    你在按钮上点击鼠标,按钮的窗口过程处理鼠标消息之后给父窗口发送WM_NOTIFY通知消息,所以父窗口有一个消息映射:
    ON_BN_CLICKED(IDC_BUTTON1, &CMFCDlg::OnBnClickedButton1)
    就是把按钮给父窗口的通知消息映射到对话框的OnBnClickedButton1函数去处理。这样不是简单么,你不需要绑定按钮到一个类,只需要在对话框处理就是了。否则界面上有100个控件就要100个类去处理,烦死了。