130827.윈도우 화면에 캐릭터 띄우기

|

#include <windows.h>


LPCTSTR g_lpszClass = 

"First"; // 클래스 이름


char g_szPlayer[15] = {"(˛¸人˛¸)"}; // 주인공 이미지

int g_iPosX = 400, g_iPosY = 500; // 주인공 위치




// 윈도우 프로시져 콜백 메시지 함수

LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam );


//

// ※ 윈도우 모드에서의 시작 메인

//    1. 윈도우 클래스 등록

//    2. 윈도우 생성

//    3. 윈도우 화면 출력

//

int WINAPI WinMain(

  HINSTANCE hInstance, // 애플리케이션 인스턴스 핸들

  HINSTANCE hPrevInstance, // 이전 인스턴스 핸들로 Win32기반은 NULL

  LPSTR lpszCmdParam, // 커맨드 라인 받을 포인터

  int nCmdShow // 윈도우가 보여질때 상태 기본 NULL

  )

{

HWND hWnd; // 윈도우 핸들

MSG Message; // 이벤트 메시지 큐


WNDCLASS WndClass; // 윈도우 클래스 구조체

// - 개발자가 원하는 형식의

//   윈도우를 만들기 위해

//   구조체에 직접 입력



// 구조체 0으로 초기화( == memset() )

ZeroMemory(&WndClass, sizeof(WndClass));


WndClass.cbClsExtra = 0; // 예약영역. 기본0으로 사용하지 않음

WndClass.cbWndExtra = 0;

WndClass.hbrBackground

(HBRUSH)GetStockObject(WHITE_BRUSH); // 바탕색(흰색)


//<추가코드>

// 백그라운드 색상 변경 테스트!!

/*

#define WHITE_BRUSH         0

#define LTGRAY_BRUSH        1

#define GRAY_BRUSH          2

#define DKGRAY_BRUSH        3

#define BLACK_BRUSH         4

#define NULL_BRUSH          5

*/


WndClass.hCursor

LoadCursor(NULL, IDC_ARROW); // 마우스 커서 이미지


//<추가코드>

// 커서 변경 테스트!!!

/*

#define IDC_ARROW   

#define IDC_IBEAM   

#define IDC_WAIT    

#define IDC_CROSS   

#define IDC_UPARROW 

#define IDC_SIZE    

#define IDC_ICON    

#define IDC_SIZENWSE

#define IDC_SIZENESW

#define IDC_SIZEWE  

#define IDC_SIZENS  

#define IDC_SIZEALL 

#define IDC_NO  

*/


WndClass.hIcon =

LoadIcon(NULL, IDI_APPLICATION); // 아이콘 이미지

WndClass.hInstance = hInstance; // 인스턴스 핸들

WndClass.lpfnWndProc = WndProc; // 프로시저 지정

WndClass.lpszClassName = g_lpszClass; // 클래스 이름

WndClass.lpszMenuName = NULL; // 메뉴이름 기본 NULL


WndClass.style = // 윈도우 스타일

CS_HREDRAW | CS_VREDRAW;


// 1. 레지스터 등록

RegisterClass(&WndClass);


// 2. 윈도우 생성

hWnd = CreateWindow(

g_lpszClass, // 클래스 이름

g_lpszClass, // 캡션바 이름(변경테스트) <추가코드>

WS_OVERLAPPEDWINDOW, // 윈도우 스타일

CW_USEDEFAULT, // 윈도우 X좌표

CW_USEDEFAULT, // 윈도우 Y좌표

CW_USEDEFAULT, // 윈도우 넓이

CW_USEDEFAULT, // 윈도우 높이

NULL, // 부모윈도우 기본 NULL

(HMENU)NULL, // 메뉴

hInstance, // 인스턴스 핸들

NULL // 여분 데이터 기본 NULL

);


//<추가코드>

// 윈도우 스타일 변경 테스트

/*

#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED     | \

WS_CAPTION        | \

WS_SYSMENU        | \

WS_THICKFRAME     | \

WS_MINIMIZEBOX    | \

WS_MAXIMIZEBOX)

*/


// 3. 윈도우 화면 출력

ShowWindow(hWnd, nCmdShow);



// ※ 무한루프

//    - 윈도우 메시지를 받아서 처리하는 부분

while( GetMessage(&Message, NULL, 0, 0) )

{

if( Message.message == WM_QUIT) break;

TranslateMessage(&Message); // 키 문자이벤트 검사 함수

DispatchMessage(&Message); // WndProc이벤트 처리 함수

}


return (int)Message.wParam;

}



//

// ※ 윈도우 프로시져

//    - iMessage : 이벤트 감지

//  - wParam, lParam : 이벤트를 통한 상세 정보

//

LRESULT CALLBACK WndProc(

HWND hWnd, // 핸들

UINT iMessage, // 이벤트 메시지

WPARAM wParam, // 메시지 파라미터 1

LPARAM lParam // 메시지 파라미터 2

)

{

HDC hdc;

PAINTSTRUCT ps;

switch( iMessage )

{

case WM_KEYDOWN : 

switch(wParam)

{

case VK_LEFT :

g_iPosX--;

break;

case VK_RIGHT :

g_iPosX++;

break;

case VK_UP :

g_iPosY--;

break;

case VK_DOWN :

g_iPosY++;

break;

}

InvalidateRect(hWnd, NULL, true);

break;


// 캐릭터 이미지 출력

case WM_PAINT :

hdc = BeginPaint(hWnd, &ps);

TextOut(hdc, g_iPosX, g_iPosY, g_szPlayer, strlen(g_szPlayer));

EndPaint(hWnd, &ps);

break;

// 윈도우 종료 이벤트

case WM_DESTROY:

PostQuitMessage(0); // 윈도우 종료 함수

break;

}


return( DefWindowProc(hWnd, iMessage, wParam, lParam) );

}

저작자 표시 비영리 변경 금지
신고
Trackback 0 And Comment 0
prev | 1 | ··· | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ··· | 30 | next

티스토리 툴바