You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改edit control标准上下文菜单的字体大小?

修改Edit Control标准上下文菜单字体大小的方案

你不需要自行构建仿造菜单,通过Win32 API可以直接修改标准上下文菜单的字体大小,具体步骤如下:

  • 拦截WM_CONTEXTMENU消息:在承载Edit控件的窗口过程中,捕获目标Edit控件触发的WM_CONTEXTMENU消息。
  • 获取标准上下文菜单句柄:通过向Edit控件发送EM_GETCONTEXTMENU消息,获取系统生成的标准上下文菜单句柄。
  • 自定义菜单字体:使用CreateFont创建指定字号的字体,再通过SetMenuInfo(支持批量应用到子菜单)或遍历菜单项调用SetMenuItemInfo,为菜单设置新字体。
  • 显示修改后的菜单:调用TrackPopupMenuEx显示调整好字体的菜单,并返回0阻止系统默认处理流程。

示例代码片段(Win32 C++)

LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CONTEXTMENU:
        {
            HWND targetEdit = (HWND)wParam;
            // 替换为你的Edit控件ID
            if (targetEdit == GetDlgItem(hwnd, IDC_CUSTOM_EDIT))
            {
                // 获取Edit控件的标准上下文菜单
                HMENU hCtxMenu = (HMENU)SendMessage(targetEdit, EM_GETCONTEXTMENU, 0, 0);
                if (hCtxMenu)
                {
                    // 创建14号Segoe UI字体(可按需调整参数)
                    HFONT customFont = CreateFont(
                        14, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
                        DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
                        DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Segoe UI"
                    );

                    if (customFont)
                    {
                        MENUINFO menuInfo = { sizeof(MENUINFO) };
                        menuInfo.fMask = MIM_STYLE | MIM_APPLYTOSUBMENUS | MIM_DATA;
                        menuInfo.dwStyle = MNS_NOTIFYBYPOS;
                        menuInfo.dwMenuData = (ULONG_PTR)customFont;
                        // 应用字体到菜单及所有子菜单
                        SetMenuInfo(hCtxMenu, &menuInfo);

                        // 可选:遍历菜单项单独设置(兼容部分特殊场景)
                        int itemCount = GetMenuItemCount(hCtxMenu);
                        for (int i = 0; i < itemCount; i++)
                        {
                            MENUITEMINFO itemInfo = { sizeof(MENUITEMINFO) };
                            itemInfo.fMask = MIIM_DATA;
                            GetMenuItemInfo(hCtxMenu, i, TRUE, &itemInfo);
                            itemInfo.dwItemData = (ULONG_PTR)customFont;
                            SetMenuItemInfo(hCtxMenu, i, TRUE, &itemInfo);
                        }
                    }
                }

                // 定位并显示菜单
                POINT menuPos = { LOWORD(lParam), HIWORD(lParam) };
                TrackPopupMenuEx(hCtxMenu, TPM_LEFTALIGN | TPM_TOPALIGN, 
                                menuPos.x, menuPos.y, hwnd, NULL);
                return 0; // 覆盖系统默认菜单显示逻辑
            }
            break;
        }
        // 其他消息处理逻辑...
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

如果需要全局修改所有Edit控件的上下文菜单字体,可使用SetWindowsHookEx设置全局钩子,但实现复杂度更高,仅推荐在全局场景下使用。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:25:16