这节练习是菜单勾选以及图标变换的,设定就是菜单中有两项,点击任意一项则此项打勾,并把图标设置成对应的。
运行结果如图:
步骤如下:
1. 建立windows标准窗口程序(用模板建立),加入.rc文件和resource.h文件
2. 将菜单的资源和两个图标资源都加入到rc文件中并在resource.h中进行#define
3. 声明全局变量hMenu并直接在注册窗口类里loadMenu
4. 声明全局变量hIcon1,hIcon2,并在创建窗口下方loadIcon
5. 处理WM_COMMAND消息,当菜单点击时,打勾并SetIcon
程序如下:
2.
#include "resource.h"
#include <windows.h>
IDI_ICON1 ICON "res/icon1.ico"
IDI_ICON2 ICON "res/icon2.ico"
/
// Menu
IDC_WINMENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "ICON1", IDM_ICON1
MENUITEM "ICON2", IDM_ICON2
END
POPUP "&Help"
BEGIN
MENUITEM "&About ...", IDM_ABOUT
END
END
3.
HMENU hMenu;
HICON hIcon1,hIcon2;
hMenu = GetMenu(hWnd);
hIcon1 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
hIcon2 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2));
5.
switch (LOWORD(wParam))
{
case IDM_ICON1:
{
CheckMenuItem(hMenu, IDM_ICON1, MF_CHECKED);
CheckMenuItem(hMenu, IDM_ICON2, MF_UNCHECKED);
SendMessage(hWnd, WM_SETICON, 0, (LPARAM)hIcon1);
}
break;
case IDM_ICON2:
{
CheckMenuItem(hMenu, IDM_ICON2, MF_CHECKED);
CheckMenuItem(hMenu, IDM_ICON1, MF_UNCHECKED);
SendMessage(hWnd, WM_SETICON, 0, (LPARAM)hIcon2);
}
break;