//
다음 예제는 운영체제 종료시 미저장 문서에 대해 사용자에게 질문하고 사용자의 응답에 따라 문서를 저장하거나 또는 버린다. 취소를 선택하면 운영체제 종료를 취소한다.
이 예제를 실행해 보면 시스템 종료시에는 WM_CLOSE, WM_DESTROY 등의 메시지가 전달되지 않음을 알 수 있다. 왜냐하면 운영체제 종료는 곧 전원이 꺼진다는 특수한 상황이기 때문에 메인 윈도우가 파괴되지 않기 때문이다. WM_CLOSE에서 미저장 문서에 대한 처리를 하고 있더라도 시스템 종료시에는 이 처리가 생략됨으로 별도의 처리가 있어야 한다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("WM_QUERYENDSESSION2");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int Result;
TCHAR Mes[]="시스템 종료시에 미저장 문서를 저장하는 예제";
switch(iMessage) {
case WM_QUERYENDSESSION:
if (TRUE/*미저장 문서가 있다 치고*/) {
Result=MessageBox(hWnd,"이 문서를 저장할래?","질문",MB_YESNOCANCEL);
if (Result==IDCANCEL) {
return FALSE;
}
if (Result==IDYES) {
// 저장했다 치고
}
}
return TRUE;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_CLOSE:
MessageBox(hWnd,"나 지금 닫혀요","아이고",MB_OK);
break;
case WM_DESTROY:
MessageBox(hWnd,"나 지금 죽어요","아이고",MB_OK);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
'Programming > MFC' 카테고리의 다른 글
SDI 폼뷰에 다중뷰 넣기 (0) | 2007.11.09 |
---|---|
시스템의 종료/재부팅/로그오프 (Shutdown/Rebooting/Logooff) (0) | 2007.11.03 |
작업 표시줄에 프로그램 타이틀 보이지 않게 하기 (0) | 2007.10.25 |
2바이트 특수문자를 띄우기 (0) | 2007.10.24 |
View의 배경색 바꾸기 (0) | 2007.10.24 |