본문 바로가기
프로그래밍/라이브러리

[Win32 API] 다이얼로그에 관하여...

by 써드아이 2008. 2. 6.
- 모달 다이얼로그 :
int DialogBox( HINSTANCE, LPCTSTR, HWND, DLGPROC );

DialogBox( HucareMenu.hInstance, MAKEINTRESOURCE( IDD_DIALOG ), hWnd, (DLGPROC) HucareDlgProc );


- 모달리스 다이얼로그 :
HWND CreateDialog( HINSTANCE, LPCTSTR, HWND, DLGPROC );

hDlg = CreateDialog( HucareMenu.hInstance, MAKEINTRESOURCE( IDD_DIALOG ), hWnd, (DLGPROC) HucareDlgProc );


HINSTANCE : 다이얼로그를 포함하는 실행파일의 인스턴스
LPCTSTR : 다이얼로그 박스 템플릿의 롱 포인터(?) 보통은 MAKEINTRESOURCE( 리소스아이디 ) 로 사용
HWND : 다이얼로그 박스를 소유한 윈도의 핸들
DLGPROC : 다이얼로그 박스 프로시저의 롱포인터

- 다이얼로그 박스의 프로시저는 리턴 타입이 BOOL 형이다.
    TRUE : 다이얼로그에서 처리가 끝났음을 알린다.
    FALSE : 다이얼로그에서 처리하지 못 했음을 알린다.



- 현재 해결하지 못 한 문제로

1. 다이얼로그에서는 WM_PAINT 메세지가 발생하지 않는다.
   Invalidate... 류의 함수를 사용해서 강제로 WM_PAINT 메세지를 발생하라고 했지만
   메세지는 발생하지 않았다. 왜 일까?

2. 키보드 입력 처리
   ESC 키는 디폴트로 다이얼로그 박스의 종료를 나타낸다. 그래서인지 인식하지 않는다.
   따라서 WM_CHAR나 WM_KEYDOWN을 적절히 사용하여 종료 키를 바꾸어 주어야 한다.