VC++6.0编辑的对话框怎样修改右上角的叉的响应函数?

VC++6.0编辑的对话框怎样修改右上角的叉的响应函数?,第1张

关于楼主提问的“对话框怎样修改右上角的叉的响应函数”就是WM_CLOSE消息的处理函数OnClose(),fanskydream已经回答的很详细了,在此不再赘述。

我要补充的是,对话框关闭有很多途径,仅仅处理WM_CLOSE消息还是不够的。

本人就曾犯过这种错误,在对话框类中new了几个变量,在OnClose中d出关闭确认的对话框并进行delete。当用户不点击这个“叉”关闭而直接用组合键“Alt+F4”关闭时,问题就来了:

首先是没有了关闭确认的对话框,再次就是没有delete那几个在堆上分配的变量造成内存泄漏。

因此,建议楼主重载对话框类的OnDestroy()函数。在这个函数里面进行是否关闭的确认,如果用户选择不关闭对话框,就直接返回该函数不调用父类的OnDestroy()即可。

而对话框对象内部动态生成的变量析构在放在PostNcDestroy()函数中进行。

添加消息:在类视图先选中要添加的类,然后在属性框的右上的消息按钮,选中消息后点击添加即可。

删除消息:在相关的类的类名上右击,选择属性,在右边d出的属性对话框的上面选择消息,找到相应的消息,在具体消息的右边的空格中单击,d出下拉列表,选择删除就行了

BEGIN_MESSAGE_MAP

END_MESSAGE_MAP

之间添加消息映射

大致如下:

BEGIN_MESSAGE_MAP

ON_BN_CLICKED(1000, OnCheck)

//1000是你的复选框的ID号,OnCheck是你点击后要执行的方法

END_MESSAGE_MAP

最后就是在相应的类中添加成员函数OnCheck去实现你要执行的 *** 作了

有什么不明白的就Hi

对话框是没有焦点权限的,所以拦截不到keydown消息(被过滤掉了,这些都是MFC包的执行约定)。SDI程序中view的扩展类都有输入子控件,有输入焦点,当然可以得到keydown进行处理。

过滤的这步是在窗口所在线程的pretranslatemessage函数里面做的(你可以重载这个函数,在里面拦截keydown消息,就能拦截到)。

添加PreTranslateMessage(MSG pMsg)虚函数。。。

在函数体中,添加如下代码:

if (pMsg->message==WM_KEYDOWN)

{

if (pMsg->wParam==81)

{

MessageBox("q");

}

}

return CDialog::PreTranslateMessage(pMsg);

在MFC中,可以通过以下步骤建立消息响应函数与控件对应的关系:

打开MFC应用程序的资源视图,双击对应的对话框资源文件(dlg文件)打开对话框编辑器。

在对话框编辑器中,选择要添加消息响应函数的控件。例如,选择一个按钮控件,然后右键单击该控件,在d出的上下文菜单中选择“添加事件处理程序”。

在d出的“添加事件处理程序”对话框中,选择要添加的消息类型。例如,选择“BN_CLICKED”表示添加“单击”消息的响应函数。

在“添加事件处理程序”对话框中,选择要添加响应函数的类。这里需要选择的是包含响应函数的类,通常是该对话框所在的类。

在“添加事件处理程序”对话框中,输入要添加的响应函数的名称。这个名称需要以“On”开头,后面跟上消息类型和控件的ID,例如“OnBnClickedButton1”。

点击“添加”按钮,将响应函数添加到代码中。然后,在响应函数中编写具体的处理逻辑。

完成上述步骤后,消息响应函数就与控件对应起来了。当用户 *** 作控件时,MFC会自动调用相应的消息响应函数来处理该消息。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12178517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存