컴퓨터 공부/MFC 프로그래밍

[5월 20일 3교시] 프로퍼티 시트2 + 고급 이벤트 메세지 1

려리군 2009. 5. 20. 11:24

※ 프로퍼티 시트 위저드에서는 '마침'을 눌렀을 때 'ID_WIZFINISH'를 리턴한다.

m_Property.SetWizardMode();

if(m_Property.DoModal() == ID_WIZFINISH)

{

// 코딩.

}

※ 반면, 프로퍼티 시트에서는 '확인'을 누르면 'IDOK'를 리턴한다.


프로퍼티페이지 관련함수

void CPropertyPage::SetModified(BOOL bChanged = TRUE);

참고주소 : http://msdn.microsoft.com/en-us/library/0hkws258(VS.80).aspx

프로퍼티 페이지에 적절한 외부 객체에 적용될 수 있을지를 기초로 하여 '적용(Apply)' 버튼을 누를 수 있는 지 없는 지 설정한다. (dirty비트 설정)

bChanged

 - TRUE : 마지막으로 적용된 때부터 프로퍼티 페이지 설정이 수정되었음을 나타낸다.

 - FALSE : 프로퍼티 페이지가 적용되었거나 무시될 거라는 것을 나타낸다.



프로퍼티시트 관련 함수

void CPropertySheet::SetWizardButtons(DWORD dwFlags);

참고주소 : http://msdn.microsoft.com/en-us/library/ex7e7b4s(VS.80).aspx

프로퍼티 페이지에서 onSetActive 발생시 부모의 포인터를 얻어서 버튼(이전, 다음, 마침등)을 누를 수 있는지 없는 지 설정한다.

dwFlag : 위저드 버튼의 형태와 함수를 사용자화하기 위한 플래그. 파라미터는 다음 값들의 조합이 될 수 있다.

PSWIZB_BACK, PSWIZB_NEXT, PSWIZB_FINISH, PSWIZB_DISABLEDFINISH.


메세지

BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
현재 호출한 쓰레드 메시지 큐로부터 메세지를 받는다. 새로운 메세지가 들어올 때까지 리턴하지 않는다.
무한대기 -> Dead time비율이 높다.
LPMSG lpMsg : 메세지 정보를 받을 MSG 구조체의 포인터
HWND hWnd 
 : 윈도우의 메세지를 받게될 핸들. 이 윈도우는 현재 실행되고 있는 쓰레드에 속해야 한다.
 : NULL이면 현재 실행되고 있는 쓰레드에 속한 어떤 윈도우든지 간에 메세지를 보낸다.
 : -1이면 PostMessage(의 인수가 NULL)이나 PostThreadMessage에 의해 호출된 메세지만 수행된다.
wMsgFilterMin, wMsgFilterMax : 메세지를 골라서 가져오기 위한 필터값

BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
메세지를 할당하고 쓰레드 메세지 큐를 검사하고 메세지가 있다면 그것을 얻는다. 즉시 리턴.
리턴 : 메세지가 있을 경우 TRUE, 없으면 FALSE
LPMSG lpMsg : 메세지 정보를 받을 MSG 구조체의 포인터
HWND hWnd 
 : 윈도우의 메세지를 받게될 핸들. 이 윈도우는 현재 실행되고 있는 쓰레드에 속해야 한다.
 : NULL이면 현재 실행되고 있는 쓰레드에 속한 어떤 윈도우든지 간에 메세지를 보낸다.
 : -1이면 PostMessage(의 인수가 NULL)이나 PostThreadMessage에 의해 호출된 메세지만 수행된다.
wMsgFilterMin, wMsgFilterMax : 메세지를 골라서 가져오기 위한 필터값
wRemoveMsg
 : PM_NOREMOVE : 메세지 큐의 메세지를 지우지 않는다.
 : PM_REMOVE : 메세지 큐의 메세지를 지운다.


Spy++

감시 -> 로그메세지 -> 해당 윈도우 선택 -> 확인

해당 윈도우로 오는 윈도우 메세지들을 확인할 수 있다.