
没有什么区别。
效果是一样的。
向导会增加几行注释,用于IDE取得之前的向导信息。这样,打开向导的时候,向导会自动找到已经处理过的事件或消息。如果是手动添加,向导里可能看不到。
这些注释,当然你也可以手动添加。
首先说明一下:
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)和END_MESSAGE_MAP()之间是VC编译器在编译程序时候,查找消息与函数的映射关系的地方,比如编译这个文件,当编译器在这个之间发现语句ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0),时,就会把消息ON_BN_CLICKED,IDC_ICONBUT0,OnIconbut0三者关联起来,使得程序运行的时候,点击ID为IDC_ICONBUT0后产生ON_BN_CLICKED消息,同时OnIconbut0函数被调用。对于一个窗口,除了我们通过手动添加或通过向导添加的消息映射之外,还有很多消息需要进行映射;比如这个例子,当鼠标从窗口上移动时,系统会向窗口发送鼠标移动消息,可是你在这里并没有处理,那谁来映射并处理这些消息,因为编译器在这里没有找到鼠标移动的消息映射,它就会从这个类的父类逐曾往上找,直到找到为止,而BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)就是告诉编译器,如果在这里找不到消息映射,就从这个类的父类CFormView开始往上查找。比如鼠标移动消息,在这里并没有做映射处理,编译器就会到父类CFormView中去查找,如果父类CFormView中也没有,编译器就会不断的往上找,直到找到CWnd类,CWnd类映射了所有的窗口消息。
对于不熟悉如何添加消息映射的朋友,最好用向导添加。对于手动添加消息映射,除了在这里添加消息映射之外,还要定义消息函数。
你是怎样添加的,怎么个无法编译,编译错误是什么?
没有WM_VSCROLL这个消息类型 就说明这个你选择的这个类不能处理这个消息
需要在选择别的类来处理MFC中每个消息 并不是所有类都能处理的 还要看消息的类型
就你目前生成的类来看 至少在CMainFrame类中应该可以找到这个消息
即在BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
ON_COMMAND(ID_FILE_PRINT_DIRECT,onNcHitTest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
里面添加你的消息宏,然后再投文件中对话框头文件中添加afx_msg void onNcHitTest
或者你随便加一个class Wizard里面有的,看看都在什么地方有了内容,比较着把这个添加进去
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)