Windows程序设计之图标光标菜单


添加资源文件方法
创建完工程和源文件后,执行菜单File->New->Files->Resource Script,输入文件名确定后,可看到在工程目录下生成两个文件:资源描述文件(.RC)和头文件(resource.h)

一、图标
1.绘制自定义图标
(1)菜单Insert->Resource->Icon,单击"New"按钮,则在左侧Icon文件夹下产生ID为IDI_ICON1的图标,右击IDI_ICON1->Properties,在"Icon Properties"里可以更改图标ID(或双击图标外的空白区域),修改为IDI_ICON;
(2)利用右侧的绘图工具绘制图标,最后保存。
 
2.使用自定义图标
在定义WNDCLASS类时,
如:
WNDCLASS wc;
...
wc.hIcon=wc.hIcon=LoadIcon(hinstance,MAKEINTRESOURCE(IDI_ICON));
...
其中,IDI_ICON是刚才自定义图标的ID
运行程序后,可看到应用程序的图标已变成刚才自定义的图标了。

注:MAKEINTRESOURCE宏

The MAKEINTRESOURCE macro converts an integer value to a resource type compatible with Win32 resource-management functions. This macro is used in place of a string containing the name of the resource.

LPTSTR MAKEINTRESOURCE(
  WORD wInteger  // integer to convert
);
 
The MAKEINTRESOURCE macro is defined as follows:

#define MAKEINTRESOURCE(i)  (LPTSTR) ((DWORD) ((WORD) (i)))

二、光标
自定义光标和图标很相似
wc.hCursor=LoadCursor(hinstance,MAKEINTRESOURCE(IDC_CURSOR));

三、菜单
1.自定义主菜单
(1)菜单Insert->Resource->Menu,单击"New"按钮,则在左侧Menu文件夹下产生ID为IDR_MENU1的图标,右击IDR_MENU1->Properties,在"Menu Properties"里可以更改主菜单ID(或双击图标外的空白区域),修改为IDR_MENU;
(2)在菜单上定义子菜单,并修改相应ID

2.使用菜单
两种方法

方法1:在WNDCLASS类中指定菜单(CreateWindow中hMenu参数为NULL)

直接将菜单ID标识用MAKEINTRESOURCE宏转换为资源串
如:wc.lpszMenuName=MAKEINTRESOURCE(IDR_MENU);

方法2:在CreateWindow函数中指定加载到内存中的菜单句柄

LoadMenu(hinstance,MAKEINTRESOURCE(IDR_MENU))  该函数返回菜单句柄
在CreateWindow第9个参数hMenu参数为LoadMenu(hinstance,MAKEINTRESOURCE(IDR_MENU))
hwnd=CreateWindow(szAppName,
    TEXT("常见资源"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    NULL,
    LoadMenu(hinstance,MAKEINTRESOURCE(IDR_MENU)),
                  NULL,
    hinstance,
    NULL
  );
3.菜单消息
最重要的菜单消息:WM_COMMAND

LOWORD(wParam)  菜单ID
HIWORD(wParam)  0
lParam          0

如:
case WM_COMMAND:
     hdc=GetDC(hwnd);
     switch(LOWORD(wParam))
 {
    case ID_MenuItemExit:
      if(MessageBox(NULL,"你真的要退出吗?","警告",MB_OKCANCEL)==IDOK)
        {
     PostQuitMessage(0);
        }
     break;
    case ID_MenuItemRect:
     Rectangle(hdc,(int)(cx/4),(int)(cy/4),(int)(cx*3/4),(int)(cy*3/4));
     break;
    case ID_MenuItemEllipse:
     Ellipse(hdc,(int)(cx/4),(int)(cy/4),(int)(cx*3/4),(int)(cy*3/4));
     break;
 }
     ReleaseDC(hwnd,hdc);
     break;
     return 0;

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值