검색결과 리스트
글
3.0에서도 실제 해 본 것은 아니지만 여기에 대한 문제점 해결을 찾다보니
몇몇 방법이 있다는 것을 알았다.
1. Flag 변수 - 시스템 종료인지 단순한 창의 종료인지 구분
2. WndProc()함수 overriding
3. Form_Closing()함수 수정
이벤트 순서 : WM_QUERYENDSESSION - Form Close - WM_ENDSESSION
public static bool bEndSession = false;
/*logoff, shutdown, restart, poweroff */
protected override void WndProc(ref Message m)
{
const int WM_QUERYENDSESSION = 0x0011;
const int WM_ENDSESSION = 0x16;
const int WM_SYSCOMMAND = 0x112;
const int WM_CLOSE = 0x0010;
const int SC_CLOSE = 0xF060;
switch (m.Msg){
case WM_QUERYENDSESSION:
Console.WriteLine("WM_QUERYENDSESSION");
bEndSession = true;
break;
case WM_ENDSESSION:
Console.WriteLine("WM_ENDSESSION");
break;
case WM_SYSCOMMAND:
if (m.WParam.ToInt32() == SC_CLOSE)
{
Console.WriteLine("SC_CLOSE");
}
break;
case WM_CLOSE:
Console.WriteLine("WM_CLOSE");
break;
}
base.WndProc (ref m);
}
private void MainForm1_Closing(object sender, System.ComponentModel.CancelEventArgs e){
if (!bEndSession){
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
this.Hide();
}
else{
//WndProc()에서 처리하도록 함.
}
}
RECENT COMMENT