首页 > 编程语言 >MFC 基于对话框的程序如何屏蔽掉 ENTER 键和 ESC 键退出的情况

MFC 基于对话框的程序如何屏蔽掉 ENTER 键和 ESC 键退出的情况

时间:2024-01-23 20:46:09浏览次数:36  
标签:MFC 对话框 VK pMsg UINT msg afx 屏蔽掉 nChar

重写PreTranslateMessage(MSG* pMsg)函数。

protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
    afx_msg BOOL PreTranslateMessage(MSG* pMsg) override;   // 重写
	DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

实现:

BOOL CMFCApplication4Dlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN) {
        if (pMsg->wParam == VK_RETURN 
            || pMsg->wParam == VK_ESCAPE)
        {
            return TRUE;
        }
    }

    // 其他消息正常
    return CDialogEx::PreTranslateMessage(pMsg);
}

这一个你就可以拦截掉消息。



另外,如果实现ON_WM_KEYDOWN消息,回车键和ESC键好像没有进入到函数里面来,其他键按下的时候可以拦截,不知道啥原因。

ON_WM_KEYDOWN:

void CMFCApplication4Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    //  VK_RETURN    VK_ESCAPE    按下的时候好像,没有进到这个函数里面来,起不到拦截作用,暂不知道原由。
    if (nChar == VK_RETURN) {
        return;
    }
    if (nChar == VK_ESCAPE) {
        return;
    }

    CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
}

标签:MFC,对话框,VK,pMsg,UINT,msg,afx,屏蔽掉,nChar
From: https://www.cnblogs.com/huvjie/p/17983376

相关文章

  • MFC OnPaint 绘制一行简单文字
    ▲绘制一行简单文字OnPaint()消息。voidCMFCApplication6Dlg::OnPaint(){CPaintDCcdc(this);/***OnPaint绘制简单文字*****/cdc.TextOutW(100,100,TEXT("你好,MFC!")); if(IsIconic()) { CPaintDCdc(this);//用于绘制的设备上下文 SendMessa......
  • MFC 自定义控件添加 tip
    一、要求1.自定义tip提示并实时提示,跟随鼠标移动2.避免重复刷导致tip闪烁3.picture控件添加自定义变量二、tip涉及2.1CMFCToolTipCtrl、CMFCToolTipInfoCMFCToolTipCtrl*m_ptooltip;//注册控件、传递提示消息CMFCToolTipInfo*m_ttinfo;//样式处理......
  • MFC---多线程(线程死锁)
    死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。#include<stdio.h>#include<windows.h>#include<process.h>intiTickets=5000;CRITICAL_SECTIONg_csA;CRITICAL_SECTIONg_csB;//A窗口B窗口DWORDWINAPISellT......
  • MFC---多线程(线程同步之信号量)
    内核对象的状态触发状态(有信号状态),表示有可用资源。未触发状态(无信号状态),表示没有可用资源工作原理以一个停车场是运作为例。假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来......
  • MFC---多线程(各种线程同步的比较总结)
    windows线程同步的方式主要有四种:互斥对象Mutex、事件对象event和关键代码段criticalSection,信号量对于上面介绍的三种线程同步的方式,它们之间的区别如下所述:●互斥对象和事件以及信号量都属于内核对象,利用内核对象进行线程同步时,速度较慢,但利用互斥对象和事件对象这样的内核对......
  • MFC---多线程(qq群聊的服务端和客户端)
    服务端//多线程+socket编程的一个联合使用//用互斥体进行线程同步socket编程临界区全局变量#include<WinSock2.h>#include<iostream>#include<windows.h>#include<process.h>#pragmacomment(lib,"ws2_32.lib")#defineMAX_CLNT256#defineMAX_BUF_S......
  • MFC---多线程(基本概念和线程同步之互斥对象)
    基本概念引入一个题目:Bingo老师提了一个需求:打印每隔3秒叫martin老师做一次俯卧撑持续20次每隔1秒钟叫rock老师甩头发持续50次每隔2秒钟叫西西老师唱歌持续40次线程(CPU调度和分派的基本单位)线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与......
  • MFC---多线程(线程同步之关键代码段)
    关键代码段,也称为临界区,工作在用户方式下。它是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。通常把多线程中访问同一种资源的那部分代码当做关键代码段。1.初始化关键代码段调用InitializeCriticalSection函数初始化一个关键代码段。InitializeCriticalSection(......
  • 在MFC中使用CArchive进行串行化数据
    使用CArchive进行数据串行化非常的方便。CArchive持有一个CFile对象,通过此对象进行读写,那么所有基于CFile的子类,都可以使用CArchive来进行串行化。示例:CFilefile(_T("1.txt"),CFile::modeReadWrite);CArchivear(&file,CArchive::load);此时CArchive对象就是处于读取的......
  • [Winform]在Form里显示模态对话框ModalDialog
    在Form里显示模态Dialog问题如何在WinForm的一个Form里面弹出一个模态Dialog?背景程序的框架是Winform,只有一个窗口MainForm。MainForm里面是一个TabControl,每个TabPage是一个Form,每个TabPage的Form相互独立,互不干扰,TabPage间可以随时切换。由于有某些需求,TabPage需要接受用户......