创建快捷方式字体属性菜单

【勇芳软件工作室】汉化HomePreviousNext

本节中的示例包含来自应用程序的代码部分,它创建并显示快捷菜单,使用户可以设置字体和字体属性。当用户单击鼠标左键时,该应用程序将在其主窗口的客户区域中显示该菜单。

以下是应用程序资源定义文件中提供的快捷菜单的菜单模板。

弹出菜单菜单

BEGIN

POPUP“虚拟弹出”

BEGIN

POPUP“字体”

BEGIN

MENUITEM“快递”,IDM_FONT_COURIER

MENUITEM“Times Roman”,IDM_FONT_TMSRMN

MENUITEM“Swiss”,IDM_FONT_SWISS

MENUITEM“Helvetica”,IDM_FONT_HELV

MENUITEM“老英语”,IDM_FONT_OLDENG

END

POPUP“大小”

BEGIN

MENUITEM "7", IDM_SIZE_7

MENUITEM "8", IDM_SIZE_8

MENUITEM "9", IDM_SIZE_9

MENUITEM "10", IDM_SIZE_10

MENUITEM "11", IDM_SIZE_11

MENUITEM "12", IDM_SIZE_12

MENUITEM "14", IDM_SIZE_14

END

POPUP“样式”

BEGIN

MENUITEM“Bold”,IDM_STYLE_BOLD

MENUITEM“斜体”,IDM_STYLE_ITALIC

MENUITEM“Strike Out”,IDM_STYLE_SO

MENUITEM“上标”,IDM_STYLE_SUPER

MENUITEM“下标”,IDM_STYLE_SUB

END

END

END

以下示例给出了用于创建和显示快捷菜单的窗口过程和支持功能。

LRESULT APIENTRY MenuWndProc(hwnd,uMsg,wParam,lParam)en

HWND hwnd;

UINT uMsg;

WPARAM wParam;

LPARAM lParam;

{

RECT rc; //客户区

POINT pt; //鼠标点击的位置

开关(uMsg){

case WM_LBUTTONDOWN:

//获取客户区域的边界矩形。

GetClientRect(hwnd, (LPRECT) &rc);

//获取鼠标点击的客户端坐标。

pt.x = LOWORD(lParam);

pt.y = HIWORD(lParam);

//如果鼠标点击发生在客户端内

//区域,执行应用程序定义的函数

//显示快捷菜单。

if(PtInRect((LPRECT)& rc,pt))

HandlePopupMenu(hwnd, pt);

break;

.

. //处理其他窗口消息

.

默认:

return DefWindowProc(hwnd, uMsg, wParam, lParam);

}

return NULL;

}

VOID APIENTRY HandlePopupMenu(hwnd,pt)

HWND hwnd;

POINT pt;

{

HMENU hmenu; //菜单模板

HMENU hmenuTrackPopup; //快捷菜单

//加载包含快捷菜单的菜单模板

//应用程序的资源。

hmenu = LoadMenu(hinst, "PopupMenu");

if (hmenu == NULL)

return;

//获取菜单模板中的第一个快捷菜单。这就是

// TrackPopupMenu显示的菜单。

hmenuTrackPopup = GetSubMenu(hmenu, 0);

// TrackPopup使用屏幕坐标,因此转换

//坐标的鼠标点击屏幕坐标。

ClientToScreen(hwnd, (LPPOINT) &pt);

//绘制并跟踪快捷菜单。

TrackPopupMenu(hmenuTrackPopup,TPM_LEFTALIGN | TPM_LEFTBUTTON,

pt.x, pt.y, 0, hwnd, NULL);

//销毁菜单

DestroyMenu(hmenu);

}