1). File -> New -> project(Tab) -> Win32 Application 선택
2). Project name은 My_Draw를 적고 OK
3). An empty project.를 선택하고 Finish
4). 아래 소스를 붙여 넣고 컴파일 한다.
5). 에러없이 검은화면이 나오면 Ok
#include < windows.h >
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LPSTR szAppName = "Fist";
int APIENTRY WinMain(HINSTANCE hInstance, // 프로그램 인스턴스 핸들
HINSTANCE hPrevInstance, // Win32에서는 항상 NULL이다.
PSTR szCmdLine, // 명령행으로 입력된 프로그램 인수
int iCmdShow) // 프로그램이 실행될 형태
{
HWND hWnd; // 윈도우핸들을 저장할 변수
MSG Message; // 메세지를 저장할 변수
WNDCLASSEX WndClass; // 등록할 윈도우의 객체 생성
WndClass.cbSize = sizeof(WndClass);
WndClass.style // 윈도우의 형태를 지정하는 멤버
= CS_HREDRAW | // 윈도우의 수직크기가 변하면 다시그린다
CS_VREDRAW; // 윈도우의 수평크기가 변하면 다시그린다
WndClass.lpfnWndProc = WndProc; // 메세지 처리함수를 지정
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance; // 핸들대입
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //아이콘 모양지정
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // 커서모양 지정
WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // 윈도우배경색 지정
WndClass.lpszMenuName = NULL; // 프로그램에서 사용할 메뉴 지정
WndClass.lpszClassName = szAppName; // 윈도우 클래스의 이름을 문자열로 지정
WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // 윈도우 아래쪽에 들어가는 작은 아이콘설정
RegisterClassEx(&WndClass); // 등록
hWnd=CreateWindowEx(WS_EX_TOPMOST, //DirectDraw응용 프로그램의 윈도우가 항상위에 위치.
szAppName, // 생성하고자 하는 윈도우 이름 (절대 스트링을 직접넣으면 안된다.)
"Draw", // 타이틀바 문자열("..."문자열로 주어도 된다)
WS_POPUP, // 윈도우의 형태를 지정(메뉴등을 모두 빼 버림 )
0, 0, // 윈도우의 시작위치
GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),// 윈도우의 크키지정(x, y)값
NULL, // 부모윈도우가 있을경우 부모윈도우의 핸들을 지정
NULL, // 윈도우의 사용할 메뉴의 핸들을 지정(NULL을 주면 등록시 주어진 메뉴사용)
hInstance, // 위도우를 만들 주체의 헨들을 준다
NULL); // 생성인자
ShowWindow(hWnd, iCmdShow); //윈도우를 화면에 그려줌
UpdateWindow(hWnd);
while( TRUE )
{
if( PeekMessage( &Message, NULL, 0, 0, PM_NOREMOVE ) )
{
if( 0 == GetMessage(&Message, NULL, 0, 0 ) )
return (int)Message.wParam;
TranslateMessage( &Message );
DispatchMessage( &Message );
}
else
{
}
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch(iMessage)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_LEFT:
break;
case VK_RIGHT:
break;
}
case WM_DESTROY :
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam) );
}
응용 프로그램의 아이콘을 지정한다. - 전체 화면 모드를 사용하면 타이틀 바가 없기 때문에
아이콘이 나타나지 않는다. 허나 Alt + Tab을 이용해 다른 응용 프로그램으로 전환되어
전체화면 응용 프로그램이 최소화 될때 테스크 바(Task Bar)에 표시하기 위해 사용된다.
배경색을 검은색으로 지정한다. - 윈도우가 생성되고 화면모드가 설정되었을 때 응용 프로그램의
배경이 화면에 나타나지 않는다. 만약 윈도우에 대한 배경 색을 지정하지 않으면 화면모드를
변경할 때 화면이 깜빡이는 현상이 나타난다. 이러한 문제는 응용 프로그램이 사용하는 윈도우의
배경 색을 검은색으로 지정함으로써 해결할 수 있다.
CreateWindow()함수를 사용한다. - WS_EX_TOPMOST를 이용하여 DirecDraw 응용 프로그램의 윈도우가
항상 제일 위에 나타나도록 한다. 이 스타일을 지정하지 않을 경우 다른 윈도우들이 응용 프로그램의
프라이머리 서페이스에 접근할 수 있게 된다.
WS_POPUP를 사용한다. - 표준 윈도우 타이틀 바, 메뮤와 같은 요소는 사용할 수 있지만 일반적으로
게임에서는 독특한(?) 상태창을 그림으로 만들어 사용한다.
(사실.. 요즘 게임들은..상태창이 거의 거기서 거기죠. 맨날 디아블로같은..그런 상태창..ㅡㅡㅋ)
일반 윈도우 응용 프로그램처럼 윈도우에 대한 타이틀을 지정한다. - 이 타이틀은 응요 프로그램이
최소화 되었거나 Alt + Tab을 이용해 다른 응용 프로그램으로 전환되었을때 사용된다.
GetSystemMetrics()를 사용한다. - 앞서 말한바와 같이 화면모드를 변경할 때 화면이 깜빡거리거나 왜곡현상이
발생하는 것을 막기 위해 배경 색은 검은색으로 지정하고 백그라운드 윈도우가 보여지지 않게 현재 자신의
컴퓨터에 설정되있는 화면 크기로 설정한다.
API Tip
확장 윈도우 스타일 플래그 (그냥 궁금해 하시는 분도 있어 적어놓는.. ㅡㅡㅋ)
종 류 기능
WS_EX_ACCEPTFILES 드래그 앤 드롭을 할수 있는 윈도우를 생성한다.
WS_EX_APPWINDOW 최상위 레벨을 가진 윈도우가 아이콘으로 표시되면 그 윈도우를 작업 표시줄에표시한다.
WS_EX_CLIENTEDGE 윈도우의 테두리를 움푹 들어가게 한다.
WS_EX_CONTEXTHELP 윈도우의 타이틀 바에 물음표 아이콘을 표시한다. 그 물음표 아이콘을 클릭하면
WM_HELP메시지가 발생한다.
WS_EX_CONTROLPARENT 여러개의 윈도우가 있을경우 TAP키를 클릭하여 윈도우와 윈도우를 왔다갔다 할수 있게한다.
WS_EX_DLGMODALFRAME 이중 테두리를 가진 윈도우를 생성한다.
WS_EX_LEFT 좌측 정렬을 한다.
WS_EX_LEFTSCROLLBAR 수직 스크롤 바가 있을 경우 클라이언트 영역의 왼쪽에 둔다.
WS_EX_LTREADING 텍스트를 왼쪽에서 오른쪽으로 출력한다.
WS_EX_MDICHILD MID자식 윈도우를 생성한다.
WS_EX_NOPARENTNOTIFY WS_PARENTNOTIFY 메시지를 사용하지 못하게 한다.
WS_EX_OVERLAPPEDWINDOW WS_EX_CLIENTEDGE 스타일과 WS_EX_WINDOWEDGE 스타일의 조합이다.
WS_EX_PALETTEWINDOW WS_EX_WINDOWEDGE 스타일과 WS_EX_SMCAPTION 스타일 그리고 WS_EX_TOMOSE 스타일의 조합.
WS_EX_RIGHT 우측 정렬을 한다.
WS_EX_RIGHTSCROLLBAR 수직 스크롤 바가 있을 경우 클라이언트 영역의 오른쪽에 둔다. 디폴트와 같다.
WS_EX_RTLREADING 텍스트를 오른쪽에서 왼쪽으로 출력한다.
WS_EX_STATICEDGE 입체감이 있는 테두리를 가진 윈도우를 생성한다.
WS_EX_TOOLWINDOW 툴(tool) 윈도우를 생성한다.
WS_EX_TOPMOST 모든 윈도우 위에 있는 윈도우를 생성한다.
WS_EX_TRANSPARENT 투명한 윈도우를 생성한다.
WS_EX_WINDOWEDGE 가장자리가 돌출된 테두리가 있는 윈도우를 생성한다.