[질문] Win32 API로 설치 프로그램 만드는 중 프로퍼티 시트에 관한 질문 입니다 ..

cjynim의 이미지

안녕하세요 .. 요즘 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

achiem의 이미지

spy++를 이용해서 다음버튼을 누를때 어떤 메세지가 어느 핸들로 보내는지 확인해보세요.. 그걸 인스톨후에 똑같이 처리해 주면 될거예요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.