0

Visual Studio 2012 で win32 アプリケーションを構築しています。次のコードで作成された 4 つの無効なボタンがあります。

HWND hWndButton=CreateWindowEx(NULL, 
        L"BUTTON",
        L"APP1",
        WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON|WS_DISABLED|BS_ICON,
        40,
        40,
        180,
        140,
        hWnd,
        (HMENU)IDC_BUTTON1,
        GetModuleHandle(NULL),
        NULL);

私がやりたいことは、アプリケーションの実行時にボタンを有効にすることです。最初のボタンを見つけて有効にするために findwindow を使用しようとしましたが、見つかりません。私のコードは次のとおりです。

HWND hwB1 = FindWindow(L"BUTTON",L"APP1");
if (hwB1 !=0)   MessageBox(NULL,L"FOUND",L"Button Found",MB_OK);
EnableWindow(hwB1,true);

私は何か間違ったことをしていますか?前もって感謝します。

4

2 に答える 2

4

FindWindow()子ウィンドウではなく、トップレベル ウィンドウを検索します。

本当に子ウィンドウを名前で検索したい場合は、FindWindowEx()関数を使用できますが、通常は ID を使用する方が効率的です。

これを行う関数はGetDlgItem(). これは、作成時に指定した ID で子ウィンドウを検索します。

HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1);

hWndは親ウィンドウでIDC_BUTTON1、ID です。

もう 1 つの方法は、子ウィンドウを作成するときに返されるウィンドウ ハンドルを単純に格納することですhWndButton(コード例で)。そうすれば、それを調べる必要はまったくありません。

于 2013-08-16T21:32:22.630 に答える