[질문] Win32 API로 설치 프로그램 만드는 중 프로퍼티 시트에 관한 질문 입니다 ..
안녕하세요 .. 요즘 Win32 API로 설치 프로그램 만드는 중 인데 프로퍼티 시트 부분에서 영 진도가
나가 질 않습니다. 일단 제가 만들고 있는 설치 프로그램은 1개의 다이얼 로그와 3개의 프로퍼티 시트로
구성이 되어 있습니다. 먼저 설치 유무를 확인 하는 다이얼 로그가 뜨고 확인 버튼을 누르면 프로퍼티 시트
가 떠서 첫번째 페이지에서 설치 경로를 확인 하고 다음 페이지에서 설치 화면을 보여주고 그 다음 페이지
에서 완료와 함께 바탕화면에 아이콘을 만들것인지 프로그램을 바로 실행 할 것인지 등에 대해서 물어 봅
니다. 전반적인 구성은 이렇고 구현도 거의 다 끝났는데 문제는 3 페이지의 프로퍼티 시트의 버튼에 있
습니다. 제가 원하는 건 두번째 페이지 그러니까 설치 부분에서 설치 중에는 다음이라는 버튼이 나오지 않
고 설치 후에는 자동으로 다음 페이지로 넘어가는 것입니다. 그래서 MSDN 라이브러리에서 두가지 프로퍼티
시트 관련 메시지를 찾아서 실행해 보았습니다. 먼저 해본것은 SendMessage(GetParent(hDlg),
PSM_PRESSBUTTON, (WPARAM)(int)PSBTN_NEXT, 0); <- 바로 요놈 입니다. 마치 다음 버튼을 누른것과
같은 효과를 준다고 해서 해 봤는데 다음 버튼을 계속 누르는 것과 같은 화면이 나오더니 자동으로 프로그램
이 종료 되어 버립니다 ... 왜 그러나 여러 방면으로 연구해 봤는데 아무래도 모르겠어서 ... 다음 방법
으로 SendMessage(GetParent(hDlg), PSM_SETCURSEL, (WPARAM)(int)2, 0); <- 요놈을 시도해 보았
습니다. 이건 wparam으로 주어지는 index에 해당하는 시트를 활성화 시켜 준다고 합니다 .. 하지만 이건
아예 동작을 하지 않습니다. 도데체 뭐가 문제인가 전혀 모르겠습니다 .. 이것 만 벌써 2주째 붙잡고 있
습니다 ㅜㅜ 아래는 제가 구현한 설치 부분의 프로퍼티 시트 다이얼 로그 소스 입니다 ..
#include "Install.h" HWND hProg, hStatic; int pos=0; BOOL CALLBACK InstallDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam) { // // 메시지 처리 // switch(iMessage) { case WM_INITDIALOG: // // 프로그레스와 스태틱에 대한 핸들을 얻어 Install()함수내에서 사용 .. // hProg = GetDlgItem(hDlg, IDC_INSTALLPROG); hStatic = GetDlgItem(hDlg, IDC_INSTLLSTATIC); pos=0; SendMessage(hProg, PBM_SETRANGE, 0, MAKELPARAM(0, 1000)); SendMessage(hProg, PBM_SETPOS, (WPARAM)pos, 0); // // 설치 // //Install(); // // 설치가 완료 된 후에 다음 버튼이 나오도록 한다 .. // SendMessage(GetParent(hDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT); //SendMessage(GetParent(hDlg), PSM_PRESSBUTTON, (WPARAM)(int)PSBTN_NEXT, 0); //SendMessage(GetParent(hDlg), PSM_SETCURSEL, (WPARAM)(int)2, 0); return TRUE; case WM_NOTIFY: switch (((LPNMHDR)lParam)->code) { case PSN_WIZNEXT: SendMessage(GetParent(hDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_FINISH); break; case PSN_RESET : EndDialog(hDlgMain, 0); break; default: return FALSE; } return TRUE; } // // 디폴트 메시지 처리 // return FALSE; }
소스에 보면 아래의 부분이 제가 시도해본 부분 입니다. 일단 잘 안되어서 주석으로 묶어 놓았습니다만 ..
제 실력으로 아무리 연구해도 잘 모르겠고 MSDN에나 제가 가지고 있는 책에도 더 이상의 설명이 없어서
왜 안되는지 잘 모르겠습니다 ..
// // 설치가 완료 된 후에 다음 버튼이 나오도록 한다 .. // SendMessage(GetParent(hDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT); //SendMessage(GetParent(hDlg), PSM_PRESSBUTTON, (WPARAM)(int)PSBTN_NEXT, 0); //SendMessage(GetParent(hDlg), PSM_SETCURSEL, (WPARAM)(int)2, 0);
여러 윈도우 프로그램의 고수님들 저 좀 도와주세요 ㅜㅜ 정말 모르겠습니다 OTL
spy++ 를 이용해보세요.
spy++를 이용해서 다음버튼을 누를때 어떤 메세지가 어느 핸들로 보내는지 확인해보세요.. 그걸 인스톨후에 똑같이 처리해 주면 될거예요.
댓글 달기