1

サブメニュー項目をグレーアウト (および無効化) しようとしているプログラムで問題が発生しています。

私が探しているのは、必要な .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 を正しく取得しているかどうか、およびこのコードが目的の効果に対して機能しない理由がわかりません。

これについての助けをいただければ幸いです。

4

1 に答える 1

1

これを最上位の 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);
    }
}
于 2012-04-19T12:23:04.173 に答える