본문 바로가기
C#/컨트롤

[Form] 서브폼을 활성화하지 않고 표시하기

by izen8 2012. 1. 10.
반응형




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


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);

}




참조 페이지 : MSDN - Windows Forms FAQ


반응형

댓글