C++ (无 MFC ) 禁用/变灰菜单项

C++ ( Without MFC ) Disabling/Graying a menu item

本文关键字:菜单项 禁用 MFC C++      更新时间:2023-10-16

我的程序在尝试灰显(并禁用)子菜单项时遇到了问题。

我正在寻找的是禁用"运行"项,除非所需的.ini条目不为空。

我的代码

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HMENU hmenu = GetMenu(hWnd);
// Reading in ini
    if (0 == strcmp(webLocation, "")){
    EnableMenuItem(hmenu,ID_WEBSERVICES_RUN,MF_DISABLED | MF_GRAYED);
    WritePrivateProfileString(_T("WEBSERVICES"), _T("Location"), _T("Tool Not Found"), WpathStr);
}

不确定我是否正确获得了 HMENU,以及为什么这段代码无法达到预期的效果。

任何这方面的帮助将不胜感激。

你不能只把它放在顶层的WndProc中。WndProc 进程事件,无论是否已构造窗口。由于许多不同的原因,它会被调用很多次。

您的 WndProc 几乎肯定会看起来像是message上的一个大开关。你想要的WM_INITDIALOG

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
         case WM_INITDIALOG:
             // jump to a new function that reads the .ini
             // and disables the control etc.
             return OnInitDialog(hWnd, wParam, lParam);
         default:
             return DefWindowProc(hWnd, message, wParam, lParam);
    }
}