Windows编程

  1. 键盘与鼠标
  2. 资源在Windows中的应用

键盘与鼠标

  • WM_KEYDOWN中不区分大小写,字母的虚拟键码分别为’A’~’Z’对应的ascill码,如果要在这里判断是否CTRL,使用GetKeyState(VK_CONTROL)判断其值是否小于0即可,当按下的键可以产生一个可见字符时会发送一个WM_CHAR的消息,所以WM_KEYDOWN是先于WM_CHAR的
  • WM_CHAR中区分大小写,如果是CTRL+字符发送过来的wParam等于字母对应字母表的位置,CTRL+’A’以及CTRL+’a’为1,以此类推
  • Ctrl+鼠标左击的判断通过&方式判断,如在WM_LBUTTONDOWN中判断是否按下Ctrl可以通过(wParam & MK_CONTROL)判断
  • 在鼠标移动过程中判断左键是否按下,(wParam & MK_LBUTTON)

资源在Windows中的应用

由于这篇文章主要供自己在学习过程当中偶尔查阅使用,因此不展开对资源的代码生成,只是简单地记下一些使用方式

  • 菜单资源:
    1.窗口主菜单
    2.菜单项(包含加速键标识于热键标识)
    3.分隔符
    手动的定义方式如下:
#include"Menu.h"
My_menu MENU MOVEABLE         //My_menu是资源名字,用于载入菜单资源时使用,MENU是关键字,MOVEALBE是一种模式
{POPUP "文件(&F)"            //POPUP是说定义一个弹出式菜单 后面就是要显示的文字,&符号后面的文字显示出来会有下划线
 {      MENUITEM     "新建(&N)",    IDM_NEW             MENUITEM     "打开(&O)",    IDM_OPEN
         MENUITEM     "关闭(&C)",    IDM_CLOSE
         MENUITEM     "保存(&S)",    IDM_SAVE
         MENUITEM     "另存为(&A)",    IDM_SAVEAS
         MENUITEM     SEPARATOR              //分隔符
        MENUITEM    “退出(&X)”,    IDM_EXIT
        //IDM_NEW,IDM_CLOSE,...是在Menu.h里自己定义好的宏,是一个1~65535的整数,用以唯一标识一个菜单项
  }
}

资源编辑器定义:
在VS里面可以点开资源文件,点开.rc文件,找到Menu点开里面的那个文件后就有一个GUI式的编写界面,按照提示编写即可,需要注意的是创建一个新的菜单项时如果想自定义它的ID对应的宏名字,可以点开旁边的属性,然后在ID那里输入想要的名字,VS会自动生成一个相应的宏,但要注意不要与已有的名字冲突

菜单的加载
1.创建窗口时加载

HMENU hMenu = LoadMenu(hInstance,MAKEINTERSOURCE(菜单ID))
//MAKEINTERSOURCE的作用跟一个数字转字符串的函数差不多
CreateWindow(...,hMenu,...);

2.动态加载

HMENU hMenu = LoadMenu(...);
SetMenu(hWnd,hMenu);

与菜单项有关的一些函数

//1.禁止或激活菜单项 
BOOL EnableMenuItem
(HMENU hmenu,
 UlNT wIDEnableItem,//被禁止或激活的菜单项标识
 UINT dwEnable
)
/*下面的一些宏是第三个参数*/
// MF_BYCOMMAND以ID值标识菜单项
// MF_ENABLED    激活菜单项
// MF_BYPOSITION    表明以位置标识菜单项
// MF_GRAYED    禁止菜单项并使其变灰显示
// MF_DISABLED    禁止菜单项

//2. 选中
DWORD CheckMenuItem
(
HMENU hmenu,    
UINT wIDCheckItem,    //菜单项标识
UINT dwCheck            //操作标识MF_CHECKED和MF_UNCHECKED
) 

//3.增加菜单项 
//末尾添加
BOOL AppendMenu
( HMENU hmenu,
  UINT dwFlags,        // 新加入的菜单项类型标识
  UINT dwIDNewItem,    // 新加入菜单项的ID
  LPCTSTR lpNewItem    // 新加入的菜单项内容
) 
AppendMenu (hmenu, MF_ENABLED,IDM_ABOUT, "关于(&A)")
//插入
BOOL InsertMenu
(HMENU hmenu,         //菜单句柄
UINT wPosition,    //指定新菜单项插入的位置
UINT dwFlag,         //新加入的菜单项的信息
UINT dwIDNweItem,    //新加入的菜单项的标识
LPCTSTR lpNewItem    //新插入的菜单项的内容
) 
InsertMenu (hmenu,IDM_EXIT,
MF_BYCOMMAND|MF_ENABLED,
IDM_PRINT,"打印(&P)");
/*还可以通过位置来插入,第二个参数为位置,第三个参数变为MF_BYPOSITION | MF_ENABLED*/

//4 删除菜单项
 BOOL DeleteMenu
(
HMENU hmenu,
UINT wPosition, //要删除的菜单项的位置
UINT dwFlag      //对wPosition的解释,使用方式与InsertMenu类似,
  )  

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2128099421@qq.com

×

喜欢就点赞,疼爱就打赏