본문 바로가기

Projects/CoVNC

[Win32 API] DialogBoxParam

DialogBoxParam



   원 형       INT_PTR DialogBoxParam(HINSTANCE hInstance, LPCTSTR lpTemplateName,

                                  HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam);


   설 명       대화상자 대부분이 비슷하고 일부분만 조금 다른 대화상자가 여러 개 필요한 경우가 있다.

                 예를 들어 저장을 위한 파일명과 읽기를 위한 파일명을 입력받는 대화상자 둘은 안내 메시지 정도만 다를 뿐 필요한 컨트롤이나 동작방식은 거의 유사하다. 에러 메시지 출력 대화상자도 에러 메시지 정도만 다르고 나머지는 거의 유사할 것이다. 이런 경우는 하나의 대화상자만 만들어 두고 필요할 때마다 대화상자의 동작방법을 조금씩 바꿔가면 사용하면 된다.


그 해결방법으로 가장 쉽게 떠오르는 것은 전역변수를 사용하는 것이다. 대화상자를 부르기 전에 전역변수에 값을 대입하고 대화상자는 이 전역변수의 값에 따라 조금씩 다르게 동작하도록 프로그래밍하면 된다. 이 방법도 물론 원론적으로 문제가 없으며 실전에서도 자주 활용되지만 대화를 위해 전역변수를 남발하는 것은 별로 바람직하지 않다. 좀 더 좋은 방법은 부모 윈도우가 대화상자를 호출할 때 파라미터를 전달하고 대화상자는 파라미터를 해석해서 동작 방법을 결정하는 방법이다. 이때 DialogBoxParam 함수가 사용된다.


함수 원형은 DialogBox 와 거의 유사하되 제일 뒤에 dwInitParam 이라는 인수가 하나 더 추가되어 있다. 이 값은 대화상자를 생성할 때 WM_INITDIALOG 의 lParam 으로 전달된다. 파라미터는 32비트의 정수값이지만 포인터를 전달할 수도 있으므로 구조체나 메모리 핸들같은 큰 데이터도 얼마든지 전달할 수 있다.

 

참조 함수    DialogBox