51_资源和键盘消息

资源(菜单,快捷键,图标,光标)的使用

  • 代码以外的东西称为资源
  • 资源的存储方式
    • 资源和代码分开的存储方式,好处就是好修改,缺点很容易被修改
    • 资源和代码放在一起的,好处是不容易被修改,坏处是修改不方便
  • 菜单
    • 菜单由主菜单和菜单项和菜单项的子菜单组成,每点击一个菜单就会有相应
    • 每一个菜单项有一个ID,通过ID区分,每个主菜单也有ID,通过ID区分
    • VS项目名添加资源Menu,修改完之后需要保存,属性修改默认ID.
      • Checked属性:False能编辑子菜单

      • Enable属性:能否点击

      • Popup属性:改为True可以增加子菜单

  • 查看资源视图其他窗口资源视图项目
  • 创建菜单的两种方式:窗口类定义的时候,创建窗口API的时候
    • 需要包含resource.h头文件
    • 窗口类定义的时候:MKEINTRSOURCE(MN_MAIN):把整数转成字符串,可以自己写(LPWSTR)。系统内部还是会调用LoadMenu

    • 创建窗口API的时候:LoadMenu从资源载入菜单

  • WM_COMMAND消息:响应菜单的点击,控件,快捷键
    • wParmar

高字节:编译菜单来源,如果是1来自控制,如果是0来自菜单

低字节:菜单Id

HIWORD:拆分高字

LOWROD:拆分低字

  • 图标
    • VS项目名添加资源Icon(一开始不能修改,新建图片类型,把之前的删除)

    • 创建图标:窗口类定义的时候
        • 窗口类定义的时候:LoadIcon

  • 光标
    • VS项目名添加资源Curson(一开始不能修改,新建图片类型,把之前的删除)

    • 创建图标:窗口类定义的时候
        • 窗口类定义的时候:LoadCurson

  • .rc资源脚本文件
    • 是一个文本文件,有语法的
    • 需要学会看这个语法

  • 手动编译链接
    • 不带rc文件

Cl /c FirstWindows.cpp

Link /subsystem:windows user32.lib FirstWindows.obj

    • Rc文件经过rc.exe编译称res二进制文件,和obj文件进行link成exe带资源文件
  • Link /subsystem:windows user32.lib FirstWindows.obj xxx.res

键盘消息

    • 理论
      • 虚拟码:windows自己对按键的数值
      • 扫描码:键盘上的每个键都对应一个扫描码(硬件上),各厂商可能不一样
      • 消息:扫描码+虚拟码
      • 虚拟键:键盘的驱动程序会把扫描码转成虚拟码(与硬件无关)
        • VK_F1
        • VK_UP
        • 数字和a-z与A-Z为ascii码值
      • 键盘焦点:窗口位于最前面获得键盘和鼠标的输入
      • 系统键:windows键之类的
    • 消息
      • WM_KEYDOWN:键盘按下,不能区分大小写

      • WM_CHAR:区分大小写键,需要调用TranslateMessge:将WM_KEYDOWN消息转换为WM_CHAR消息。支持中文
        • 判断大小写键是否打开和shift键是否打开

      • WM_KEYUP:键盘弹出

      • GetAsyncKeyState:判断键是按下还是弹起,判断快捷键麻烦

      • WM_COMMAND:快捷键消息
        • 快捷键资源:Accelerator

  • 加载:LoadAccelerator
  • 使用:TranslateAccelerator把WM_KERDOWN转为快捷键资源

WM_CLOSE和WM_DESTROY的区别

  • 作用
    •  MessageBox:返回值是按下的选项
    • DestroyWindow:摧毁一个窗口,释放资源
  • 时机
    • WM_CLOSE:还没开始摧毁
    • WM_DESTROY:没有机会后悔,已经在摧毁了

MessageBox

  • 返回值可以做检查

作业

1. 使用GetAsyncKeyState来实现快捷键的处理,
CTRL+B
CTRL+Shift+X
Shift+M
2. 使用DrawIcon绘制一个迷宫地图

详见https://github.com/xkkhh/ResourcesAndKeyboardMessages

0 条评论
发表一条评论