记录2 2016年7月20日_(MFC的一些问题)

类别: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;

          虚拟键位码的介绍:
               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值


                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值