#include <windows.h>
//───────── 함수선언 ──────────────────────────────────────
//윈도우프로시져 함수 -사용자와 시스템이 보내오는 메세지를 처리
void DrawScreen(HDC hdc);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);// CALLBACK는 호환성과 이식성을 위한 매크로
//───────── 전역변수 ──────────────────────────────────────
HINSTANCE g_hInst; //핸들 인스턴스(실행중인 프로그램 하나를 의미/ 프로그램 번호로 봐도 무방)
LPCSTR lpszClass=TEXT("가가오독 ");
//LP는 long pointer를 나타내는 약어
// C는 constant의 약자-함수의 내부에서 인자값을 변경하지 말라는 뜻
// STR은 string 의 약어
int IsKeyPressed;
//───────── 메인함수 API엔트리 는 윈도우즈 표준규약을 사용한다는 의미 ─────────────
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd; //윈도우 손잡이(핸들러)
MSG Message; // 메인함수에서 읽어들이는 메시지
WNDCLASS WndClass;//윈도우클래스 lpszClassName,lpfnWndProc,style,hInstance등 10개의 멤버를 가진 구조체
g_hInst=hInstance; //인스턴스 - 실행되는 프로그램 하나 (영어의 뜻: 경우,실제예,사건)
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//기본배경색
//WndClass.hbrBackground=(HBRUSH)CreateSolidBrush(RGB(200,50,100));//사용자 배경색
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좌표 가로폭 세로높이 크기
0,0,550,500,
NULL,(HMENU)NULL,hInstance,NULL);//부모윈도우 핸들, 메뉴핸들,프로그램핸들,구조체번지
///////////////// 윈도우 보여주기 ////////////////////////////
ShowWindow(hWnd,nCmdShow);
//////////////////메세지 루프 멀티태스킹 지원 ////////////////////////
while(GetMessage(&Message,NULL,0,0)) //메세지를 읽어들임
{
TranslateMessage(&Message);//키보드 입력 메세지를 만들기
DispatchMessage(&Message); //메세지를 윈도우 프로시저에 전달
}
return (int)Message.wParam; //메세지의 부가 정보
}
//───────── 윈도우 프로시듀어 함수─────────────────────────
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{ //콜백함수 -운영체제에 의해 호출되는 응용프로그램 내의 함수
HDC hdc ;
PAINTSTRUCT ps;
static TCHAR str[256];//입력할 문자열 배열 static매번초시화 되지않게 한다
int len ; //배열의 길이를 저장할 문자열
static bool iskeypressed=FALSE;
switch(iMessage)
{
case WM_DESTROY: //윈도우가 메모리에서 파괴될때 발생
PostQuitMessage(0);
return 0;
case WM_CHAR: //문자입력이 될 때 발생
len = strlen(str); //문자열의 길이를 구한다.
str[len]=(TCHAR)wParam ;//현재 문자열의 위치애 입력값 저장
str[len+1]=0 ;//문자열의 끝에 null문자 \o넣기
InvalidateRect(hWnd,NULL,FALSE);//페인트를 다시 그리게하는 방법
return 0;
case WM_PAINT: //윈도우즈를 다시 그릴 때 발생
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,str,strlen(str));
//if(IsKeyPressed)//키가 눌렸을 때만
//{DrawScreen(hdc);}//화면을그린다.
EndPaint(hWnd,&ps);
return 0;
case WM_LBUTTONDOWN: //마우스 왼쪽 버튼을 눌렀을 때 발생
//MessageBeep (MB_OK);
//return 0;
if(MessageBox(hWnd,"지뢰 찾기 게임을 할까요?","질문",MB_YESNO|MB_ICONINFORMATION)== IDYES)
WinExec("C:\\Minesweeper.exe",SW_SHOW); //지뢰찾기 게임하기
else
SetWindowText(hWnd,"게임은 그만");
return 0;
case WM_KEYDOWN:
IsKeyPressed=TRUE;
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));//기타의 경우 처리
}
//───────── 사용자정의 함수 ──────────────────────────────
void DrawScreen(HDC hdc)
{
/*Rectangle(hdc , 10,10,300,450);
Rectangle(hdc , 530,10,310,130);
Rectangle(hdc , 530,210,310,450);
TextOut(hdc,350,20,"쉬운 테트리스",13);
TextOut(hdc,350,40,"버전 ver 0.1",12);
TextOut(hdc,350,60,"제작:김정민",11);
TextOut(hdc,350,80,"도움:하늘바다학원",17);
TextOut(hdc,320,140,"완성줄수:0",10);
TextOut(hdc,320,160,"모은블럭:0",10);
TextOut(hdc,320,180,"합계점수:0",10);*/
}
//───────────────────────────────────────────────