VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)
基于MFC对话框的应用程序在响应按键消息和热键方面都力不从心,CDialog类的消息循环中去掉了TranslateAccelerator函数,因此不能响应热键;同时由于对话框上可能有很多控件,且默认情况下这些子窗口已经截获了焦点,因此键盘消息已经被控件捕获了;同时为了实现控件焦点切换和对话框默认行为, VK_TAB、VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN、 VK_RETURN、VK_ESCAPE 等键已经被截获处理,因此对话框没有控件时仍然不能完全响应按键消息。
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYUP)
{
// 响应keyup消息
if(pMsg->wParam == VK_RETURN)
{
// 回车
}
}
return CDialog::PreTranslateMessage(pMsg);
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
// 组合键响应keydown消息
if( pMsg->wParam == VK_SPACE&& (GetKeyState(VK_SHIFT)& 0x8000))
{
// 空格 + Shift
}
}
else if(pMsg->message == WM_SYSKEYDOWN)
{
// Alt组合键响应syskeydown消息
if( pMsg->wParam == 'A'&& (HIWORD(pMsg->lParam) & KF_ALTDOWN))
{
// A + Alt
}
}
return CDialog::PreTranslateMessage(pMsg);
}
VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)的更多相关文章
- mfc对话框不能响应键盘消息
这东西真是奇怪,找了半天原因,最终的发现却是让人抓狂,呵呵 现象:对话框按ESC或回车都不能关闭窗口(我没有处理PreTransplanteMessage),用spy++看,对话框完全收不到键盘消息 ...
- [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)
[原]MFC中DIALOG(对话框)程序响应加速键(快捷键) 2014-8-6阅读266 评论0 新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件.添加一个按钮,Caption ...
- VC 对话框程序加入工具栏button图标及其buttontooltip
注意:本人使用VC++2010开发环境进行測试. 在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,非常多资源都须要自己手动加入.近期在开发一个程序时.想尝试在对话框程序里面加入 工具 ...
- vc对话框程序运行时隐藏
1.在资源编辑中设置对话框为不可见 2.在OnPaint中加入下面代码 void CMyDlg::OnPaint() { static b = false; if(!b){ ShowWindow(SW ...
- Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息
今天在学习的时候,发现对话框上不响应键盘消息,查了老半天,终于成功了,现分享出来, 1,首先要在消息循环的时候加如下代码. int WINAPI WinMain(_In_ HINSTANCE hIns ...
- VC对话框使用OnEraseBkgnd函数位图背景并透明
1.使用OnEraseBkgnd函数实现对话框位图背景 BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC *pDC) { CRect rect; GetC ...
- 第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8
基于键盘与鼠标应用的程序设计 一.实验目的 1.掌握键盘与鼠标在应用程序中的消息响应机制. 二.实验内容及步骤 实验任务 1.熟悉键盘的消息响应: 2.熟悉鼠标的消息响应: 实验内容 设计一个窗口 ...
- VC++MFC对话框程序中给对话添加背景图片
VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^ 工具/原料 Visual C++ 2010 方法一:用Pic ...
- MFC模态对话框程序不响应OnIdle
从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinT ...
随机推荐
- 脚本 用 scp 拷贝文件
#!/usr/bin/expect set proj_dir /home/jksong/NewsSpark/openid_for_commonid set tmp_data_dir $proj_dir ...
- PL/SQLDeveloper导入导出Oracle数据库方法
前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- MAGIC XPA最新版本Magic xpa 2.4c Release Notes
New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...
- MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱
网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#l ...
- 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:
- FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输
fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...
- Entity framework code first
EF Code First 不便之处,数据库结构改变时,需要利用程序包管理器控制台生成代码,再用update-database -Verbose更新数据库,这样的做法在很多时候不容易部署.下面介绍一种 ...
- OCP认证之Oracle的SQL语言基础(一)
一.Oracle命令类别 数据操纵语言(DML):select;insert;delete;update;merge 数据定义语言(DDL):create;alter;drop;truncate 事物 ...
- Oracle:分割字符串 取TOP N条记录
oracle数据库,表数据如下: ids id 3,4,5 7 13,14,15,16 ...