2013-08-16 1 views
0

내가 비주얼 스튜디오 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 하위 창을 만들 때 반환되는 창 핸들을 저장하는 것입니다. 그런 다음 전혀 찾지 않아도됩니다. 컨트롤 ID를 알 수없는 경우

0

사용 FindWindowEx(),

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

이 더 나은 방법이다.

+0

@aschipfl :이 설명이 도움이됩니까? –

+0

네, 고마워요! – aschipfl

관련 문제