2014. 12. 3. 15:11



소스코드

using System.Runtime.InteropServices;


...

Some Class ...


        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

        private int WM_IME_NOTIFY         = 0x0282;
        private int WM_DESTROY            = 0x0002;
        private int WM_NCDESTROY          = 0x0082;
        private int WM_CLOSE              = 0x0010;
        private int IMN_CLOSESTATUSWINDOW = 0x0001;
        private int WM_KILLFOCUS          = 0x0008;
        private int WM_COMMAND            = 0x0011;


...


        protected override void WndProc(ref Message m)
        {
            if(m.Msg == (int)WM_CLOSE)
            {
                MessageBox.Show("X 눌렸엉 ㅠㅠ");
            }

            base.WndProc (ref m);
        }




Form1_Closing() 역시 종료 할때 발생합니다만, 그 이전에 WndProc 가 먼저 처리 됩니다.


X 눌렸을 때 막고, 닫기 버튼을 눌렀을 경우에만 종료 시키려면 Form1_Closing() 메서드에 e.Cancel = false; 주되, 특정 변수값 세팅이면 true 로 주면 되겠네요.


닫기 버튼은

변수 값 세팅, form.Close() 주면 될 것이고


우상단 X 는

WndProc에서 변수값 세팅해 주면 될 것이고~ 



그냥 Form1_Closing() 에 e.Cancel = false; 만 주면 불사속성을 지닌 창을 마주하게 될 겁니다. 





Posted by 해비