用VC编写一个指法练习的小程序,如图所示。
大致功能是:
启动则随即显示一行字母,然后敲击键盘,击键代码与光标指针“ ^ ”对应字母相同,则消去字母行中该字母,否则保留。
这个程序别的都好说,主要的问题是对WM_CHAR消息的响应问题。
为了截获键盘击键的值,需要用到WM_CHAR消息。但在Project中添加该消息后会发现,程序无法响应该消息。即击键后程序并没有执行到该消息对应的函数处。参考MSDN对该消息的描述:
This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the parameters received by the framework when the message was received. If you call the base-class implementation of this function, that implementation will use the parameters originally passed with the message and not the parameters you supply to the function.
关键的意思是要执行WM_CHAR消息,程序焦点必须在主窗口上。但不幸的是,程序运行以后,焦点在按钮上。解决的方式是使用PreTranslateMessage消息,进行处理,将焦点设置到主窗口上。具体代码如下:
BOOL CTTDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if ( pMsg->message == WM_KEYDOWN ||pMsg->message == WM_CHAR)
{
{
pMsg->hwnd = m_hWnd;
return FALSE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
此后即可响应WM_CHAR消息了。
上面文字,关键是学习设置应用程序焦点的方法!
源代码:
http://ffrock.bokee.com/inc/TT.rar
分享到:
相关推荐
VC中CString_int_string_char之间的转换。非常使用的技巧。
常用的WM消息函数,方便大家学习和使用,常用于VC6平台,消息函数比较多,有些不常用的消息容易忘记,好东西大家分享
vc截获并过滤某个程序中的某个消息的程序源代码。比如通过过滤WM_TIMER消息来消除某些未注册程序的运行时间限制.zip
1、使用WM_DRAWITEM和WM_MEASUREITEM消息在父窗口实现按钮自绘; 2、使用WM_DRAWITEM和WM_MEASUREITEM消息在父窗口实现列表控件自绘; 3、使用WM_DRAWITEM和WM_MEASUREITEM消息在父窗口实现下拉控件自绘; 4、通过...
源对话框发送WM_COPYDATA消息到目标对话框,目标对话框接受WM_COPYDATA消息,实现进程间消息的传递。该结构也可以传递一个结构体,但一定是“值类”,里面不能含有指针。
在VC6.0中写的COM使用VS2005C#调用
增加VC6.0的__FUNCTION__宏,并有测试工程
进程间通讯小程序,用VC2008 编写 WM_COPYDATA 控制发送消息
VC调用COM组件 VC call COM components
1. windows消息WM_ 2. WM_NULL = $0000; 3. WM_CREATE = $0001; 4. 应用程序创建一个窗口 5. WM_DESTROY = $0002; 6. 一个窗口被销毁 7. WM_MOVE = $0003; 8. 移动一个窗口 9. WM_SIZE = $0005; 10. 改变一个...
自定义消息 更多内容见:vcshare.net和http://www.hedanwang.cn/bbs/
c++的一个很典型的应用就是dll的调用,对于怎么样好的调用dll程序,阅读本程序对您将大有益处。
这个程序是我用来做数据处理的,在VC中调用matlab编写的.m文件来实现我所需功能,直接调用matlab中现成的函数来处理在vc中需要自己编很长代码来实现的数据处理函数,提高了工作效率,结合vc的界面美观与matlab的方便
VC6.0中_创建、调用dll(20150418211345).pdf
(1)文字逐个出现、并同步发出击键盘的声音; 你建一个单文档程序选择基类为CEditView 了 在WM_CHAR 中用Beep()函数可以使PC喇叭发出"be"声 (2)禁止运行程序多个实例,即一个程序同时只能运一份
在 VC中如何实现 matlab的调用,
windows远程过程调用,详细讲解如何编写RPC程序
在VC_环境下调用MATLAB方法 在VC_环境下调用MATLAB方法
VB调用VC编写的DLL.一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL;一种是VC生成ActiveX控件(.ocx),在VB中插入;还有一种是在VC中生成ActiveX Automation服务器
VC与Matlab接口在图像处理中的实现