hahahia

Window 빈 창 띄우는 예제(1) 본문

Windows Programming/Windows::API

Window 빈 창 띄우는 예제(1)

hahahia 2012. 5. 8. 22:50

/* first.cpp */


#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE g_hInst;

LPSTR lpszClass="First";


int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

 ,LPSTR lpszCmdParam,int nCmdShow)


{

HWND hWnd;

MSG Message;

WNDCLASS WndClass;

g_hInst=hInstance;

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

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

TranslateMessage(&Message);

DispatchMessage(&Message);

}

return Message.wParam;

}


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

{

switch(iMessage) {

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

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

}



- windows.h 만 포함해 주면 stdio.h나 conio.h, graphics.h 등을 포함해 줄 필요가 없다


- 프로그램의 시작점인 엔트리 포인트(Entry Point)가 main 함수가 아니라 WinMain이다.


- hInstance : 프로그램의 인스턴스 핸들. hInstance란 프로그램 자체를 일컫는 정수값이며 API 함수에서 수시로 사용된다. 그래서 이 예제에서는 WinMain의 인수로 전달된 hInstance값을 전역 변수 g_hInst에 대입해 두었다 


WinMain은 프로그램을 시작시키기만 하며 실질적인 처리는 대부분 WndProc에서 이루어진다


출력 결과



참고

error C2440: '=' : 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.

'CreateWindowExW' : 매개 변수 2을(를) 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.


저 소스를 입력했을 때 위의 메시지같은 에러가 나올 경우가 있다. 이 경우에는

프로젝트의 속성->구성속성->일반->문자 집합

->유니코드 문자 집합 사용에서 멀티 바이트 문자 집합 사용으로 바꾼다.



참고 | http://winapi.co.kr/

Comments