C/C++/MFC
프로그램을 종료시킬 때 WM_DESTROY 활용하기
2006.05.23 13:23
WM_SYSCOMMAND라는 메세지 핸들러를 이용하여 아래와 같이 한다.
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam){
if( nID==SC_CLOSE)
MyBuffer=1;
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
======================================
먼저 WM_SYSCOMMAND를 추가 해야 합니다.
간단하게 말하면 ( 다이얼로그베이스 프로그램 기준)
클래스 위저드에서 WM_SYSCOMMAND 이베트를 추가 해야 하는데 Message Map 에 아마 없을겁니다.
그러면 위저드의 Class Inof 탭으로 이동해서 Message filter 를 Dialog -> Window 로 바꾸고 Message Map 탭으로 돌아오면
WM_SYSCOMMAND 가 있을겁니다.. AddFunction 하면 아래 OnSysCommand 함수가 생길겁니다.
그안에서 nID 에 따라서 원하는 동작을 하시면 될겁니다.
void CxxxxDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
if(nID == SC_MAXIMIZE)
{
}
else if(nID == SC_CLOSE)
{
}
}
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam){
if( nID==SC_CLOSE)
MyBuffer=1;
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
======================================
먼저 WM_SYSCOMMAND를 추가 해야 합니다.
간단하게 말하면 ( 다이얼로그베이스 프로그램 기준)
클래스 위저드에서 WM_SYSCOMMAND 이베트를 추가 해야 하는데 Message Map 에 아마 없을겁니다.
그러면 위저드의 Class Inof 탭으로 이동해서 Message filter 를 Dialog -> Window 로 바꾸고 Message Map 탭으로 돌아오면
WM_SYSCOMMAND 가 있을겁니다.. AddFunction 하면 아래 OnSysCommand 함수가 생길겁니다.
그안에서 nID 에 따라서 원하는 동작을 하시면 될겁니다.
void CxxxxDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
if(nID == SC_MAXIMIZE)
{
}
else if(nID == SC_CLOSE)
{
}
}