.대화상자 정리

도움말 메뉴의 프로그램 소개를 작성한다. 대화상자 템플리트를 만든다면 멋있게 작성할 수도 있지만 실습 예제 수준에는 맞지 않으므로 메시지 박스로 간단하게 소개만 하기로 하자.

 

LRESULT Main_OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   case IDM_HELP_ABOUT:

      MessageBox(hWnd,"C언어와 API 실습을 위한 예제 ApiDraw입니다.\n"

          " 예제의 소스와 설명 문서는 http://www.winapi.co.kr 있습니다.",

          "프로그램 소개",MB_OK);

      break;

 

다음은 모든 대화상자를 부모의 중앙에 나타나도록 보자. 대화상자가 항상 캔버스 좌상단에 열리기 때문에 별로 보기에 좋지 않다. 다음 유틸리티 함수를 추가한다.

 

void MoveToParentCenter(HWND hWnd)

{

   RECT wrt,crt;

   HWND hParent;

 

   hParent=GetParent(hWnd);

   if (IsIconic(hParent)) {

      ShowWindow(hParent,SW_RESTORE);

   }

 

   GetWindowRect(hParent,&wrt);

   GetWindowRect(hWnd,&crt);

   SetWindowPos(hWnd,HWND_NOTOPMOST,wrt.left+(wrt.right-wrt.left)/2-(crt.right-crt.left)/2,

      wrt.top+(wrt.bottom-wrt.top)/2-(crt.bottom-crt.top)/2,0,0,SWP_NOSIZE);

}

 

대화상자의 핸들을 주면 부모의 중앙을 조사하여 대화상자를 이동시킨다. 대화상자 프로시저의 WM_INITDIALOG에서 함수를 호출하면 된다. 프로그램에는 개의 대화상자가 있는데 모두 똑같이 처리하면 된다.

 

BOOL CALLBACK GridDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

   switch(iMessage) {

   case WM_INITDIALOG:

      MoveToParentCenter(hDlg);

      ....

 

나머지 대화상자에도 같은 코드를 삽입하도록 하자. 이제 대화상자가 부모의 중앙에 나타날 것이다.