键盘与鼠标
- 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