폼을 활성화 하지 않고 표시
음 그러니까 메인폼에서 새로운 폼을 호출 하 되, 포커스는 메인폼에 유지하고 싶을 때를 말한다.


Utility Class

user32.dll 을 임포트하여 Win32API를 이용하는 유틸리티 클래스를 정의한다.
SetVisibleNoActivate 메소드에서 SetWindowPos Win32API를 호출한다. 윈도우 스타일로 SWP_NOACTIVATE 플래그를
지정함으로 구현하는 것 같다.

public static class UtilFuncs

{

        [DllImport("user32.dll")]

        extern public static bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
                                                                 int x, int y, int cx, int cy, int uFlags);


        public const int HWND_TOPMOST = -1;     // 0xffff 

        public const int SWP_NOSIZE = 1;            // 0x0001 

        public const int SWP_NOMOVE = 2;          // 0x0002 

        public const int SWP_NOACTIVATE = 16;   // 0x0010 

        public const int SWP_SHOWWINDOW = 64; // 0x0040 


        public static void ShowWindowTopMost(IntPtr handle)

        {

            SetWindowPos(handle, (IntPtr)HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE |
                                                                                                 SWP_NOMOVE |
                                                                                                 SWP_NOACTIVATE |
                                                                                                 SWP_SHOWWINDOW );

        } 

        

        public static void SetVisibleNoActivate(Control control, bool visible )

        {

            if (visible) 

                ShowWindowTopMost(control.Handle);

            

            control.Visible = visible;

        }




폼 비활성화 / 숨기기

위에서 정의한 클래스의 SetVisibleNoActivate 메소드를 호출한다.

폼을 활성화 하지않고 표시
- SetVisibleNoActivate(form, true);

폼을 숨김
- SetVisibleNoActivate(form, false);

private void btnCall_Click(object sender, EventArgs e)

{

            Form2 obj = new Form2();

            //obj.Show();


            //UtilFuncs.SetVisibleNoActivate(obj, false);

            UtilFuncs.SetVisibleNoActivate(obj, true);

 }





Sample :  FormActivateDemo.zip

참조 페이지 : MSDN - Windows Forms FAQ


Posted by six605
,