类别:MFC学习
日期:2016年7月20日
标题:MFC的键盘响应(OnKeyDown),CBrush和CPen的区别,Cstring和string之间的转化
编号:2
一.MFC的键盘响应:
1.键盘消息的主要分类:
1)系统消息::(系统键Alt,F10等),由系统内部处理
WM_SYSKEYDOWN
WM_ SYSKEYUP
WM_SYSCHAR
2)非系统消息
WM_KEYDOWN
WM_KEYUP
WM_CHAR
2.CWnd::OnKeyDown(UINT nChar ,UINT nRepCnt, UINT nFlags) //消息响应函数
有三个变量 ,UINT是一种整型的类型,用来映射一些键位或者表示状态。
nChar :指定特定键的虚键控代码。有关标准虚键控代码清单,请参见Winuser.h
//也就是传入参数不是一个字符啊喂!!
nRepCnt :重复次数(该键击重复由于按住键)的用户的次数。
nFlags :指定扫描代码,键转换代码,前一个关键状态,并且,上下文代码,如下面的列表所示:
如果要响应组合键,可以用GetAsyncKeyState()检测按键状态,比如:
case VK_UP:
if (GetAsyncKeyState(VK_LSHIFT))
{
// 左shift+up
}
break;
if (GetAsyncKeyState(VK_LSHIFT))
{
// 左shift+up
}
break;
虚拟键位码的介绍:
0~9和A~Z 为ASCII码,(去除ASCII码前的0),如A为65,不是065;
其它的为VK码,如下所示:
在对话框程序中,如果窗体中有类似于edit control的可以接受键盘输入的控件,那么OnKeyDown()可能不会响应。这时需要调用PreTranslateMessage函数来解决这个问题。
在MFC(Microsoft Foundation Class)对响应消息进行了封装,可以通过重载虚函数 PreTranslateMessage()对所关心的消息进行
截取与响应:详见
http://www.cnblogs.com/huipengkankan/archive/2011/09/21/2184479.html
二.CBrush和CPen的区别:CBrush会填充所画封闭图形,而Cpen只会填充背景色(如果没有设置空画刷的话)如
cbsh.CreateSolidBrush(RGB(0,0,0)); //创造一个实心画刷
三.Cstring和string之间的转化
这个需要把工程属性的字符串选项改成多字符(不是Unicode的那个)之后才不会报错
CString input;
std::string mid=input.GetBuffer(0);
//或者这样(没有试过)
CString input;
std::string mid=input.GetString();
另:int和CString之间的转化
int a;
CString output;
output.Format("%d",a);
PPS:#include<functional>之后可以在std::下使用hash函数
#include<iostream>
#include<string>
#include<functional>
using namespace std;
int main()
{
hash<string> hash_fn;
string str;
size_t result=hash_fn(str);
}
//result就是最后得出的hash值