本文共 3802 字,大约阅读时间需要 12 分钟。
在Windows程序中,菜单和资源是开发应用程序的重要组成部分。菜单可以帮助用户更方便地访问功能,而资源则包括图标、鼠标指针、字符串和自定义资源等,能够提升程序的外观和用户体验。
在Visual Studio中,可以通过以下步骤添加图标资源:
nmake 编译项目。nmake 时,确保生成的资源文件包含图标。注:在Visual Studio 2015中,Export Makefile 已不可用。建议手动生成 makefile 或使用 makefile project。
使用 LoadIcon 加载图标:
hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
通过 LoadIcon 函数获取图标句柄:
#define MAKEINTRESOURCE(i) (LPTSTR)((DWORD)((WORD)(i)))hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
使用字符串资源时,可以通过 LoadString 函数加载:
LoadString(hInstance, id, szBuffer, iMaxLength);
支持 Unicode 格式,LoadStringW 和 LoadStringA 分别处理 Unicode 和 ANSI 字符串。
加载自定义资源时,使用 LoadResource 和 LockResource:
hResource = LoadResource(hInstance, FindResource(hInstance, MAKEINTRESOURCE(IDR_BINTYPE), TEXT("BINTYPE")));pData = LockResource(hResource); 释放资源后使用 FreeResource。
菜单可以是 启用 或 禁用,并可以是 活动 或 非活动。
每个菜单有三个特征:
使用 F 键激活菜单(默认行为),菜单项可以设置为灰色(gray),启用(enabled)或选中(checked)。Separator 用于添加水平分割线。
通过窗口类设置菜单:
wndClass.lpszMenuName = szAppName; // 给菜单指定名称
或者动态加载菜单:
hMenu = LoadMenu(hInstance, TEXT("MyMenu")); 在窗口创建时传递菜单句柄:
CreateWindow(..., hMenu);
Windows发送以下消息类型:
0xF000。DrawMenuBar 强制重绘菜单。键盘加速键(如 F1 到 F6)在多窗口环境中非常重要,用于通过 WM_COMMAND 或 WM_SYSCOMMAND 消息传递命令。
使用 LoadAccelerators 加载加速键表:
hAccel = LoadAccelerators(hInstance, TEXT("MyAccelerators")); 在消息循环中,使用 TranslateAccelerator 处理加速键消息:
while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); }} #include#include "resource.h"LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { // ... 事件处理逻辑 ...}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // ... 窗口创建和显示 ...}
#include#include "resource.h"LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { // ... 菜单事件处理逻辑 ...}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // ... 窗口创建和菜单加载 ...}
// Microsoft Visual C++ 生成的资源脚本。#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS// 菜单资源MENUDemo MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New", 40001 MENUITEM "&Open", 40002 MENUITEM "&Save", 40003 MENUITEM "Save &As...", 40004 MENUITEM SEPARATOR MENUITEM "E&xit", 40005 END POPUP "&Edit" BEGIN MENUITEM "&Undo", 40006 MENUITEM SEPARATOR MENUITEM "C&ut", 40007 MENUITEM "&Copy", 40008 MENUITEM "&Paste", 40009 MENUITEM "De&lete", 40010 END POPUP "&Background" BEGIN MENUITEM "&White", 40011, CHECKED MENUITEM "&Light Gray", 40012 MENUITEM "&Gray", 40013 MENUITEM "&Dark Gray", 40014 MENUITEM "&Black", 40015 END POPUP "&Help" BEGIN MENUITEM "&Help...", 40016 MENUITEM "&About MenuDemo...", 40017 ENDEND
#include#include "resource.h"LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { // ... 弹出菜单处理逻辑 ...}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // ... 窗口创建和菜单加载 ...}
通过以上内容,可以清晰地了解如何在Windows程序中使用菜单和资源,提升用户体验和程序功能。
转载地址:http://nxbg.baihongyu.com/