#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//함수선언-운영체제의 모든 메세지 처리
HINSTANCE g_hInst; //핸들 인스턴스(실행중 프로그램 / 프로그램 번호로 봐도 무방)
LPCSTR lpszClass=TEXT("프로그램명");//LP=long pointer C=constant STR=문자열
//─────────────────────────────────────────────────
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{ //윈도우 메인함수
HWND hWnd; //현재 윈도우
MSG Message;
WNDCLASS WndClass;//윈도우클래스 10개의 멤버를 가진 구조체
g_hInst=hInstance;//현재핸들인스턴스를 global(전역변수)로 선언
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,//x,y좌표,가로,세로
NULL,(HMENU)NULL,hInstance,NULL);//부모윈도우,메뉴,윈도우 핸들,구조체번지
ShowWindow(hWnd,nCmdShow); //윈도우 보여주기
while(GetMessage(&Message,NULL,0,0)) //메세지 루프 멀티태스킹-메세지 읽음
{
TranslateMessage(&Message);//키보드 입력 메세지를 만들기
DispatchMessage(&Message); //메세지를 윈도우 프로시저에 전달
}
return (int)Message.wParam; //메세지 부가정보
}
//──── 콜백 윈도우메세지처리 함수 ───────────────────────────
void DrawScreen(HDC hdc);
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static bool isKeyPressed = false;
switch(iMessage) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if(isKeyPressed)
{
DrawScreen(hdc);
}
EndPaint(hWnd, &ps);
return 0;
case WM_KEYDOWN:
isKeyPressed = true;
return 0;
case WM_LBUTTONDOWN:
DrawScreen(hdc);
MessageBox(hWnd, "왼쪽 버튼 눌림 ", "알림", MB_OK);
return 0;
case WM_RBUTTONDOWN:
if(MessageBox(hWnd, "지뢰찾기 게임을 할까요?", "안내", MB_YESNO)==IDYES)
WinExec("winmine.exe", SW_SHOW); //지뢰찾기 게임하기
else
SetWindowText(hWnd, "게임은 적당히");
return 0;
case WM_DESTROY: //윈도우가 메모리에서 파괴될때 발생
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));//기타의 경우 처리
}
void DrawScreen(HDC hdc)
{
Rectangle(hdc, 20, 10, 220, 35);
TextOut(hdc, 25, 15, TEXT("키보드가 한번이상 눌렸음"), 24);
}
//──────────────────────────────────────────────