2013-08-16 50 views
0

我建立在Visual Studio 2012年Win32應用程序我有下面的代碼創建了4個禁用按鈕:WinAPI的FindWindow函數

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

FindWindow()發現頂層窗口,而不是子窗口。

如果你確實想通過名稱來查找一個子窗口,你可以使用FindWindowEx()功能,但使用該ID通常是更有效的。

這樣做的功能是GetDlgItem()。這會按照您在創建時提供的ID來查找子窗口。

HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1); 

hWnd是父窗口,IDC_BUTTON1是ID。

另一種替代方法是簡單地存儲創建子窗口時返回的窗口句柄 - 代碼示例中的hWndButton - 然後您根本不需要查看它。

0

使用FindWindowEx()

HWND hwB1=FindWindowEx(hWnd/*Parent window*/, 
         hWndButton/*Child window*/, 
         "BUTTON"/*Class of the child window*/, 
         "APP1"/*Title of the child window*/); 

這是一個較好的方法,當控制ID是未知的。

+0

@aschipfl:這個解釋有幫助嗎? –

+0

是的,謝謝你! – aschipfl