首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VC++:如何防止esc关闭对话框(不是mfc)

在非MFC的VC++中,防止用户按下ESC键关闭对话框可以通过重写对话框类的PreTranslateMessage函数来实现。以下是一个简单的示例:

  1. 创建一个新的对话框类,例如MyDialog
  2. MyDialog类中重写PreTranslateMessage函数。
  3. PreTranslateMessage函数中检查是否按下了ESC键,如果是,则忽略该键事件。

以下是一个示例代码:

代码语言:cpp
复制
class MyDialog : public CDialog
{
public:
    MyDialog(CWnd* pParent = NULL);

protected:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
};

MyDialog::MyDialog(CWnd* pParent)
    : CDialog(MyDialog::IDD, pParent)
{
}

BOOL MyDialog::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
    {
        // 忽略ESC键事件,不关闭对话框
        return TRUE;
    }

    return CDialog::PreTranslateMessage(pMsg);
}

在这个示例中,我们创建了一个名为MyDialog的新对话框类,并重写了PreTranslateMessage函数。在该函数中,我们检查了是否按下了ESC键,如果是,则返回TRUE以忽略该键事件,从而防止对话框关闭。

请注意,这个示例仅适用于非MFC的VC++项目。如果您使用的是MFC项目,请使用标准的MFC对话框类和方法来处理ESC键事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VC++编写ActiveX控件

,里面涉及一个响应用PLC的采集信息的问题(PLC用串口和工控机相连接),然后思考如何用C#写串口通讯程序,结果师兄在一旁直接用VC++写了一个“*.ocx控件”,并在自己的电脑上进行了测试,完工后就把生成的...因为笔者现在只是学习这个技术并作为一个技术积累,而没有对这个技术进行原理上的深入研究,所以很多术语可能完全是错误的,希望高手看到后,不吝踢教和指正,也能防止本文误认“子弟”了。...下面开始介绍,如何VC++一步步生成你想要的“*.ocx”文件。 1....2.自VC++生成的模板基础上自定义功能      所有的自定义功能基本上都来自于“MFC ClassWizard”类向导对话框。    ...3.2.1 通过VC++调用      利用VC6.0建立一个MFC的基本对话框应用程序      在完成程序向导后。执行下面的步骤: 1.

3.4K30
  • MFC 键盘钩子「建议收藏」

    那么如何将我们自己的回调函数置于函数链的链首呢?函数SetWindowsHookEx()实现的就是该功能。...三、具体实现 理论的话就不多说了,运行VC++6.0,新建一个MFC AppWizard(dll)工程,命名为Hook,使用默认的创建DLL类型的选项,也就是使用共享MFC DLL,点击完成后开始编写代码...立刻停止当前声音的播放转去播放新的声音,这样在我们连续击键时就不会有阻塞感了.为了执行sndPlaySound函数,必须在Hook.cpp的文件头加上: #include "mmsystem.h" 并且点击VC...在程序中如何调用DLL呢?那就简单了.再用VC++6.0新建一个MFC AppWizard(exe)工程,命名为KeySound,点击”确定”后选择程序类型为对话框,直接点击确定即可....在KeySoundDlg.cpp文件中的OnInitDialog()初始化函数的CDialog::OnInitDialog();下面添加: //阻止程序反复驻留内存,也为了防止有两个程序同时读取DLL

    1.3K20

    C#引用C++的链接库文件报错 应用程序无法启动,因为应用程序的并行配置不正确 解决办法

    (异常来自 HRESULT:0x800736B1) 定位错误 以管理员身份运行cmd 执行命令启动跟踪,SxsTrace Trace -logfile:SxsTrace.etl 执行目标程序,弹出错误对话框...关闭对话框后,回到命令行,点击回车 继续执行命令,SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt,解析跟踪信息为文本 打开SxsTrace.txt...排查错误 在打开的SxsTrace.txt文件中可以看到类似于一下错误(版本可能不同) 错误: 无法解析参考 Microsoft.VC80.MFC,processorArchitecture=”amd64...Microsoft.VC80.DebugCRT.manifest、msvcm80d.dll、msvcp80d.dll、msvcr80d.dll这四个文件放到链接库相同目录下就可以了 Visual Studio每个版本对应的VC

    1.8K30

    VS下如何建立一个新的MFC程序 网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示

    这里不知道会不会有人是真的新手 新新手 不知道怎么 如何建立一个MFC 工程 应该不会吧?...就是 打开VS 新建项目-MFC -MFC工程-点基于对话框 -和在静态库中使用 然后下一页将关于对话框取消了 不然会有两个对话框出来 然后点击完成 具体如下 步骤1:双击打开vs2013,进入起始页,...勾选“基于对话框”,在“MFC的使用”中,勾选“在静态库中使用MFC(U)”,再点击下一步。...就能出来对话框  点击确定按钮 hello word 就出来啦 上面这些完成就代表项目建立完成,然后还实现了每个初学者的hello word 哈哈哈哈哈哈 以上就是新手建立MFC教程 下面简单介绍点知识就进入主题...什么什么变量 在什么地方引用 之类的错误 设置一些引用文件的环境变量,基本跟opencv配置过程差不多    如果配置过OpenCV的就知道了      点击项目->属性---改成所有配置--配置->vc

    3K30

    WINDOWS核心编程--Windows程序内部运行机制

    第四个参数 nCmdShow 指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数的值由该程序的调用者所指定,在调用ShowWindow()时可以使用到该值。...CS_HREDRAW: 当水平长度改变或移动窗口时,重画整个窗口 CS_NOCLOSE: 禁止系统菜单的关闭选项 CS_OWNDC: 给予每个窗口实例它本身的DC。...注意,这是子窗口还是从系统缓存中获取DC,而不是使用父窗口的DC。使用该风格可以提高系统性能。...是一个光标资源 第八个hbrBackground—窗口类的背景画刷句柄 第九个lpszMenuName----以空终止的字符串—指定菜单资源的名字 菜单不是一个窗口 第十个lpszClassName--...第五个参数 wRemoveMsg确定消息如何被处理。

    1.5K50

    visual C++ 项目和解决方案的区别

    工具->选项->文本编辑器->C/C++ ->高级->回退位置 那里,两个都设成true 如果你设置了回退位置,那么IPCH等就会到那里去,否则会在系统TEMP里,有个VC++文件夹下。...Database由False改为True就可以了,最后关闭VS2010再删除.sdf文件和ipch目录以后就不会再产生了。...但关闭此选项以后也会有很多不便,例如写程序时的智能提示没有了。 .sln文件和.suo文件为MFC自动生成的解决方案文件,它包含当前解决方案中的工程信息,存储解决方案的设置。...4.资源文件 一般我们使用MFC生成窗口程序都会有对话框、图标、菜单等资源,应用程序向导会生成资源相关文件:res目录、HelloWorld.rc文件和Resource.h文件。...当然不是了。我认为,学习C++初期当然是熟悉C++的语法,中期是学习STL库、系统API以及C++面向对象的思想和一般的设计方法,后者是伴随你C++生涯一生的,因为它没有终点。

    1.4K30

    OCX 入门

    最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~ (环境说明——平台:vs2005;语言:VC...++;基于对话框) ①新建工程: 首先以管理员身份运行vs2005,文件->新建->项目,选择Visual C++下MFC,模板选MFC ActiveX控件,自定义工程名(我的为MyActiveX),确定后基本采用默认设置...5)另外,对话框的Style属性改为Child(默认为Popup),这样运行的控件就会嵌在网页窗口内,而不是单独弹出一个对话框。当然,这里要根据你的实际需求选择。...注释掉”OnOK();”,这样点击确定按钮就不会直接关闭对话框了。 ⑧编译调试程序,生成.ocx文件 若以上步骤都成功完成,那么恭喜你,一个简单的ActiveX控件就已经初步编写完成啦!...不是的,而是微软把它放在了例子程序里面(提供源码),需要自己编译。

    3.1K60

    C++面试题

    3、MFC对话框的种类,各自怎么使用?及相关函数 4、自定义一个Windows消息的发送与响应,有哪些步骤? 5、在MFC窗口中制作一个逃跑按钮(鼠标永远捕捉不到),该如何实现?...10、如何从H264码流中获取视频的分辨率大小? 11、H264码流中I帧,P帧,B帧的区别是什么?...例如就++操作而言,对引用的操作直接反应到所指向的对象,而不是改变指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。 (2)、构造函数和析构函数是否可以被重载,为什么?...面试 1、对MFC熟悉么?写过复杂的界面没有?还有文档视图使用的多不? 2、使用过哪些VC++中的线程同步? 3、VC++中网络模型熟悉不?...5、如何保证访问STL容器比如vector、map、set线程安全?

    2.2K30

    CC++程序员 面试经历总结

    4、MFC中CSocket类能不能用在多个线程中,请说明原因。 5、IOCP在服务器中的应用,其特点和优势是什么,主要解决了什么问题。 6、存储过程是什么?在ADO和ODBC中存储过程如何使用?...它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。...四、VC++程序员面试  图像处理 1、QT和C++什么关系,你认为QT和MFC相比有什么异同点,各自的优势什么? 2、谈谈VC++中ADO连接数据库的几种方式? 3、QT采用的编译器是什么?...然后面试官说错了,QT是采用GCC作为编译器,其他平台需要做移植的,所以我们采用VC++做而不是QT。这点说实话有点没搞懂。...尤其为了应聘VC++工程师职位,必须好好看看如下这几本书: 1、《MFC Windows应用程序设计》(第2版) 2、《VC++深入详解》孙鑫编著 3、《深入浅出MFC》第二版 侯杰著 4、《网络编程实用教程

    2.3K31

    网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示

    这里不知道会不会有人是真的新手 新新手 不知道怎么 如何建立一个MFC 工程 应该不会吧?...就是 打开VS 新建项目-MFC -MFC工程-点基于对话框 -和在静态库中使用 然后点击完成 注意啦 命名 都用英文 源码在这https://pan.baidu.com/s/1chRMPK   工具:...什么什么变量 在什么地方引用 之类的错误 设置一些引用文件的环境变量,基本跟opencv配置过程差不多    如果配置过OpenCV的就知道了      点击项目->属性---改成所有配置--配置->vc...第二步:   先上代码:  这里点击我对话框BUTTON 跳转出来的函数 void CMYSQLLLINKDlg::OnBnClickedButton1() {     // TODO:  在此添加控件通知处理程序代码...上面这个就是一个简单的实现 从 MFC  到数据库的   查询学生信息的小界面。

    1.4K60

    Chrome 120 有哪些值得关注的更新?

    这些机制一般被称为关闭请求,它们通常在桌面平台上通过 ESC 键,或者在 Android 平台则通过后退手势或按钮来实现。...当用户发送一个关闭请求,比如按下 Esc 键或者安卓的返回键时,CloseWatcher 会触发一个 onclose 事件。开发者可以通过监听这个事件,来处理用户的关闭请求。...这对于防止将来的事件出现在这个观察器上,以及释放 "free CloseWatcher slot "非常有用。 此外,API还有一种进阶用法,允许开发者请求关闭确认。...,例如按Esc键或者安卓的返回键'); }; // 当你不再需要CloseWatcher时,你可以销毁它 watcher.destroy(); // 如果你想在用户试图关闭某个对话框时弹出一个确认对话框...举个例子,假设你是一个网站的拥有者,希望控制你的网站和第三方代码如何使用浏览器功能。例如,只允许你的网站和你信任的网站使用地理位置功能,而不是广告 iframes 。

    43410

    WIN32 API —— 最简单的Windows窗口封装类

    首先需要封装的就是窗口,例如MFC就是用CWnd类封装了窗口对象。我们当初抛弃MFC的原因,就是因为它太复杂不容易理解,所以对基本窗口对象的封装一定要做到最简单化。...MFC里有很多这种重复的功能,其实只是可以少写一个hwnd参数而已,却多加了一层调用。...由于VC++默认不启用RTTI,同时考虑到代码兼容性和运行效率,也不提倡启用RTTI,在没有RTTI支持的情况下,如何才能在运行时把同一个类的所有实例与其他类的实例进行区分呢?...为防止C++对象在窗口对象之前销毁,在XqWindow类的析构函数中,先通过DestroyWindow()销毁窗口对象。...如何防止这种破坏,需要进一步研究。 (2)使用C++对象的虚表指针,而这个指针的具体内存布局并没有明确的规范标准,一旦将来VC++编译器修改虚表指针的存放位置,程序将会出问题。

    2K20

    VS2015中用C++创建MFC DLL动态库「建议收藏」

    1 打开VS2015,新建MFC dll动态库,如下图所示: 2 点击下一步,在应用程序设置里选择带静态链接的MFC规则,这个主要为了以静态库的形式生成MFC dll,便于动态库可以移植到其它编程语言或者其它计算机系统里调用...dllexport) int _stdcall add_func(int a, int b); 网上有很多博客写的导出函数都在前面加了extern “C”,在我看来这是没必要的,因为是生成C++格式标准的函数,而不是...8 在MFC_dll.def 中定义函数的显示导出: 代码如下: add_func @1 9 然后编译工程,即可成功生成mfc dll的动态库 10 生成了动态库,那么如何把这个动态库提供给别人用...因为我们的mfc dll动态库是在Release模式下生成的,因此控制台也必须为Release模式。 12 接下里配置mfc dll这个库的导入。...导入一个C++动态库相信大家都清楚了吧,就跟C++导入任何一个动态库的方法一样,在VC++目录配置包含目录以及库目录,在链接器输入里配置动态库里的MFC_dll.lib文件。

    1.7K10

    把cef3集成到MFC中的一些坑

    在将cef3集成到MFC时,遇到了一些问题。google了很多文档,都是针对几个月之前的版本,由于api变化太多,某些坑不能解决。现在做一下记录,防止下次再掉坑里。...dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO:  在此放置处理何时用 //  “确定”来关闭对话框的代码...} else if (nResponse == IDCANCEL) { // TODO:  在此放置处理何时用 //  “取消”来关闭对话框的代码 } else if (nResponse...\n"); TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。...= NULL) { delete pShellManager; } // 由于对话框关闭,所以将返回 FALSE 以便退出应用程序, //  而不是启动应用程序的消息泵。

    6.7K40
    领券