2013-07-20 3 views
0

사용자 정의 팝업 (WS_POPUP) 윈도우에서 mimicking :: MessageBox() 비헤이비어에 대한 이동 방법. 여기서 팝업 윈도우는 사용자가 버튼 중 하나를 클릭하고 클릭 결과를 반환 할 때까지 대기합니다. 당신이 uType에 MB_YESNO를 가지고 있고 소유자 윈도우에 대한 핸들이 제공되면 :: MessageBox()처럼, 어떤 버튼이 클릭되었는지에 따라 ID_YES 나 ID_NO를 반환합니다.MessageBox()를 모방 중입니다. 팝업 윈도우에서의 동작

순수 Win32 API 및 C++. 당신이 WM_COMMAND 메시지를 통해 소유자 창으로 전달 버튼의 BN_CLICKED 통지를 처리 ​​할 때

답변

3

DialogBox()는 핵심 winapi 기능입니다.

완전히 후 자신을 회전하려면 다음을 수행해야합니다 :

  1. 으로 반복 EnumThreadWindows와 스레드 (모든 최상위 창) 및
  2. 가 GetMessage 함수와 메시지 루프를 실행
  3. EnableWindow로 해제 + DispatchMessage
  4. 이 버튼에 대화 반환 값을
  5. 쓰기 메시지 핸들러를 나타내는 변수를 사용하여, 그 루프 종료 조건을 추가, 그들은 그 변수를 설정해야합니다
  6. 1 단계를 반복, 재 활성화 창
  7. 는 대화 상자 창을
  8. 반환 변수 값
+0

@HandPassant 자리를 파괴한다. 감사합니다 :) – StudentX

+1

지점 2를 확장하십시오.) 키보드 탐색을 활성화하려면 ['IsDialogMessage'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645498.aspx)를 포함시켜야합니다. . – IInspectable

2

EndDialog(m_hWnd, IDYES)의 전화 대화 상자를 종료하고 값 (IDYES) 높은 수준의 호출자에게 반환과 API를 제공합니다. (대화 상자 특히 MessageBox 모달 대화 상자를 모달이 아닌) 반환 코드가없는

비 모달 팝업 창, 당신은 WM_CLOSE로를 닫고 창에서 코드/값을 결과로 얻을 수있는 방법을 자세히 설명해야 , 필요하다면.