Notice
Recent Posts
관리 메뉴

Hacking Arts

WinMain - 3.윈도우 객체 화면에 띄우기 본문

Programing/API Programing

WinMain - 3.윈도우 객체 화면에 띄우기

Rakehell 2014. 9. 19. 21:06

-윈도우 클래스를 생성하고 윈도우 객체를 생성하는 것까지 했다. 그다음은 윈도우 객체 화면에 띄우기 이다.

윈도우 존재를 띄어주는 함수로 ShowWindow를 사용한다.


-ShowWindow()


[그림 1 ShowWindow 정의]


첫번째 인수는 hWnd 화면에 보여줄 윈도우 객체의 핸들이고, 두번째 인수 nCmdShow는 화면에 보여줄 윈도우 형태이다.


 설정 값

설명 

 SW_FORCEMINIMIZE

 2000 이후에만 쓸 수 있는 플래그로 윈도우를 소유한 스레드가 차단된 상태에서도 윈도우를 최소화 시킨다.

 SW_HIDE

 윈도우를 숨긴다.

 SW_MAXIMIZE

 윈도우를 최대화 시킨다.

 SW_MINIMIZE

 윈도우를 최소화 시킨다.

 SW_RESTORE

 최대화나 최소화된 윈도우를 이전 상태로 복구한다.

 SW_SHOW

 윈도우를 활성화시켜서 화면에 띄운다.

 SW_SHOWDEFAULT

 STARTUPINFO 구조체가 지정하는 보기 상태로 만든다.

 SW_SHOWMAXIMIZED

 윈도우를 최대화된 상태로 활성화 한다.

 SW_SHOWMINIMIZED

 윈도우를 최소화한 상태로 활성화 한다.

 SW_SHOWMINNOACTIVE

 윈도우를 최소화 상태로 화면에 띄우며 활성화 상태 그대로 변경되지 않는다.

 SW_SHOWNA

 윈도우를 현재 상태로 화면에 띄우며 활성화 상태 그대로 변경되지 않는다.

 SW_SHOWNOACTIVATE

 최근 크기와 위치에 윈도우를 띄우며 활성화 상태 그대로 변경되지 않는다.

 SW_SHOWNORMAL

 윈도우를 화면에 띄우며 활성화한다. 만약 윈도우가 최소화되어 있거나 최대화되어 있다면 윈도우를 원래 크기로 복구한다.

[표 1 nCmdShow 요소]


[그림2 이런식으로 설정해서 사용하면 된다]


실제 코드를 적용하게되면 아래처럼 사용하게 된다.
LPWSTR lpszClass = L"ApiBase";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
	HWND hWnd;
	MSG Message;

	WNDCLASS WndClass;

	WndClass.cbClsExtra = 0;					//클래스 여분 바이트수
	WndClass.cbWndExtra = 0;					//윈도우 여분 바이트수
	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);	//윈도우의 배경색
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);			//프로그램에서 사용할 커서
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);		//프로그램에서 사용할 아이콘
	WndClass.hInstance = hInstance;					//프로그램의 인스턴스 핸들
	WndClass.lpfnWndProc = (WNDPROC)WndProc;			//프로시져 함수명
	WndClass.lpszClassName = lpszClass;				//구조체로 만들어질 클래스명
	WndClass.lpszMenuName = NULL;					//프로그램에서 사용할 메뉴
	WndClass.style = CS_HREDRAW | CS_VREDRAW;			//윈도우 스타일

	RegisterClass(&WndClass);

	hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL);

	ShowWindow(hWnd, nCmdShow);
}
-참고 서적
API Programing / 이창현 / 혜지원
http://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633548(v=vs.85).aspx