#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //함수원형(파라미터에 인자 안적어둬도 됨)
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("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.hbrBackground=CreateSolidBrush(RGB(255,0,0)); //배경색 (원색배경-RGB(적,녹,청))
//WndClass.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0)); //배경색 (기울어진 바둑판 배경)
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); //마우스 커서 (화살표 모양)
//WndClass.hCursor=LoadCursor(NULL,IDC_CROSS); //마우스 커서 (십자(+) 모양)
//WndClass.hCursor=LoadCursor(NULL,IDC_IBEAM); //마우스 커서 (I자 모양)
//WndClass.hCursor=LoadCursor(NULL,IDC_NO); //마우스 커서 (원안에 빗금친 모양)
//WndClass.hCursor=LoadCursor(NULL,IDC_WAIT); //마우스 커서 (모래시계 모양)
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //타이틀바 좌측 아이콘 변경 (기본창 모양)
//WndClass.hIcon=LoadIcon(NULL,IDI_ASTERISK); //타이틀바 좌측 아이콘 변경 (원 느낌표)
//WndClass.hIcon=LoadIcon(NULL,IDI_ERROR); //타이틀바 좌측 아이콘 변경 (엑스 모양)
//WndClass.hIcon=LoadIcon(NULL,IDI_EXCLAMATION); //타이틀바 좌측 아이콘 변경 (삼각형 느낌표)
//WndClass.hIcon=LoadIcon(NULL,IDI_QUESTION); //타이틀바 좌측 아이콘 변경 (물음표 모양)
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc; //WndProc 함수가 시작하는 시작 주소를 갖는다(call back함수)
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=lpszClass;
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); //ShowWindow화면에 보여준다
/**************************************************************************************************************************
윈도우 속성..크기 색깔 타이틀바..
<코드>
hWnd=CreateWindow(lpszClass,TEXT("내가만든 첫번째 윈도우즈 프로그램"),WS_HSCROLL|WS_SYSMENU,100,100,300,200,NULL,(HMENU)NULL,hInstance,NULL);
<부분 설명>
*lpszClass,TEXT("타이틀바")타이틀바꾸기
*CW_USEDEFAULT
CW_USEDEFAULT(X축 위치),CW_USEDEFAULT(Y축 위치),CW_USEDEFAULT(폭),CW_USEDEFAULT(높이)
윈도우가 기본 정의 해놓은 값을 사용 하려고 하면 CW_USEDEFAULT를 쓰면된다.
*WS_OVERLAPPEDWINDOW
WS_CAPTION 타이틀 바를 가진다.
WS_HSCROLL 수평 스크롤을 가진다.
WS_VSCROLL 수직 스크롤을 가진다.
WS_MAXIMIZEBOX 최대화 버튼을 가진다.
WS_MINIMIZEBOX 초소화 버튼을 가진다.
WS_SYSMENU 시스템 매뉴를 가진다.
WS_THICKFRAME 크기를 조절할 수 있는 경계선을 가진다.
WS_OVERLAPPEDWINDOW 윈도우가 기본 정의 해놓은 값을 사용 하려고 하면
EX)
WS_HSCROLL|WS_SYSMENU 이렇게도 쓰이고
WS_OVERLAPPEDWINDOW|WS_VSCROLL 이렇게도 쓰일수있다.
******************************************************************************************************************************/
while(GetMessage(&Message,NULL,0,0)) //GetMessage메세지 꺼냄
{
TranslateMessage(&Message); //키보드 해석
DispatchMessage(&Message); //메세지 보냄
}
return (int)Message.wParam; //종료
}
/******************************************************************************************************
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM IParam)
WPARAM 일반 키조작 (데이터를 실어 보낸다..)
LPARAM 특수한 키조작 ex)ctrl+c같은 특수한 키조작
*******************************************************************************************************/
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM IParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(iMessage)
{
/*윈도우 종료메세지(종료메세지가 없을시 메모리에 상주되어 있어 애러발생)*/
case WM_DESTROY: PostQuitMessage(0); //윈도우 종료메세지
return 0;
/******************************************************************************************************
<참고>
HDC 라는 자료형은 DC에 대한 핸들이라고 보면된다.
DC는 겹쳐지거나 덥어버리는 경우에는 화면에서 없어진다..
case WM_LBUTTONDOWN: 왼쪽 마우스 클릭시 아래의 명령을 실행
hdc=GetDC(hWnd);
입력으로 들어오는 HWND hWnd 윈도우에 적당한 DC를 만들어서 (각종 그리기 정보들) 그 값을 리턴하여 준다.
TextOut(hdc,100,100,TEXT("최진영 천재다"),12);
ex)TextOut(함수호출,[좌표값X,Y],내용,글짜수);
ReleaseDC(hWnd,hdc); hWnd 에서 불러온것 hdc를 종료하라
GetDC에 의해 얻어진 핸들은 사용 후에 반드시 ReleaseDC 함수에 의해 해제되어야 한다.
********************************************************************************************************/
/*
case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
TextOut(hdc,536,420,TEXT("Beautful Korea"),14);
TextOut(hdc,600,450,TEXT("is My"),5);
TextOut(hdc,500,480,TEXT("Lovely Home County"),18);
ReleaseDC(hWnd,hdc);
return 0;
*/
/*********************************************************************************************************
MessageBox(hWnd,TEXT("메세지박스 테스트"),TEXT("메세지박스"),MB_YESNO);
ex> MessageBox(함수호출,TEXT("윈도우 안의 내용"),TEXT("타이틀바 내용"),옵션);
(옵션)
MB_ABORTRETRYIGNORE Abort,Retry,Ignore 버튼 3개가 나타난다.
MB_OK OK 버튼 하나만 나타난다.
MB_OKCANCEL OK,Cancel 2개의 버튼이 나타난다.
MB_RETRYCANCEL Retry,Cancel 2개의 버튼이 나타난다.
MB_YESNO Yes,No 2개의 버튼이 나타난다.
MB_YESNOCANCEL Yes,No,Cancel 3개의 버튼이 나타난다.
*********************************************************************************************************/
case WM_LBUTTONDOWN:
MessageBox(hWnd,TEXT("메세지박스 테스트"),TEXT("박스"),MB_YESNO);
return 0;
/*******************************************************************************************************
<참고>DC는 겹쳐지거나 덥어버리면 화면에서 없어졌는데
Paint는 그렇지 않다.. 화면에 계속 출력해준다..
hdc=BeginPaint(hWnd, &ps);
첫번째 인자는 윈도우 핸들을 받고 두번째 인자는 PAINTSTRUCT 포인터 객체를 받아서 PAINTSTRUCT 포인터가
가르키고 있는 객체에 알맞은 값을 채워 넣어줍니다. 그리고 리턴값으로는 HDC형 핸들을 리턴해준다.
TextOut(hdc,100,40,TEXT("KOR"),5);
ex)TextOut(함수호출,[좌표값X,Y],내용,글짜수);
EndPaint(hWnd, &ps); hWnd에서 불러온것인 &ps를 종료하라.
BeginPaint에 의해 얻어진 핸들은 사용 후에 반드시 EndPaint함수에 의해 해제되어야 한다.
*********************************************************************************************************/
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,100,40,TEXT("KOR"),5);
EndPaint(hWnd, &ps);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,IParam));
}
'C/C++ > API' 카테고리의 다른 글
2009.07.27 API KEY입력 (0) | 2009.07.27 |
---|---|
2009.07.27 API도형그리기 (0) | 2009.07.27 |
API기본 함수 (0) | 2009.07.27 |
2009.07.23 API 수업 (0) | 2009.07.23 |
WINAPI (0) | 2009.07.22 |
댓글