본문 바로가기
C/C++/API

2009.07.24 API 수업

by 꿀꿀이냐옹이 2009. 7. 24.
반응형

#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

댓글