TODAY : / TOTAL :

120619_API :: API 기본형식 (Default Form)

  • Share this:
반응형

#include <windows.h>

// 프로시저 [콜백] 함수 선언
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE g_hInst;

LPCTSTR lpszClass=TEXT("First"); 
// == const char* ptr = "First"; => const char* ptr = TEXT("first"); 
// 운영체제가 ANSI 형식이면 상관없지만, 유니코드면 오류 발생. 반드시 TEXT 안에 글자를 넣을것.

//메인 [콜백] 함수  <- 운영체제가 메인함수에 인수 전달 // - 메인함수가 전달받는 인수 4가지
int APIENTRY WinMain(HINSTANCE hInstance,            // 1.프로그램에 핸들 전달.
                                    HINSTANCE hPrevInstance,   // 2.이전 버전 윈도우에 사용했던 인수 (현재사용X)
                                    LPSTR lpszCmdParam,         // 3.콘솔창에 입력한 내용을 하나의 문자열로 인식, 인수 전달.
                                    int nCmdShow)                     // 4.콘솔창을 어떤식으로 뜨게 할건지 결정.
{
 HWND hWnd;                 // 핸들만을 저장하는 변수
 MSG Message;             // 메시지를 저장하는 클래스
 WNDCLASS WndClass;  // 윈도우클래스 구조체
 g_hInst=hInstance;         // 프로그램 식별번호 Instance
 
/*************선언해둔 윈도우클래스 구조체 설정 ==  메인 윈도우 디자인 결정.****************/
 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; /**중요** 윈도우 프로시저 함수 포인터 ******/
 // 메시지를 처리할 함수(프로시저)가 누구인지 지정
 WndClass.lpszClassName=lpszClass; // **중요** 클래스 이름 지정 :: lpszClass; == " First "********/
 WndClass.lpszMenuName=NULL; // 메뉴 설정 :: NULL == 없음.
 WndClass.style=CS_HREDRAW | CS_VREDRAW;  // 가로(Horizon). 세로(Vertical) 길이 변경시 다시 그림(ReDraw)
 RegisterClass(&WndClass);  // 디자인 설정을 완료한 후 스타일 등록.
/****************************** 디자인 설정 종료 ****************************************/

// 등록한 스타일로 윈도우(창) 생성 
hWnd=CreateWindow (
lpszClass,                                   // 클래스 이름.
lpszClass,                                   // 제목 표시줄 내용. 
WS_OVERLAPPEDWINDOW,           // 제목표시줄 - (최소,최대화, 닫기 아이콘), 시스템 메뉴 만들기
CW_USEDEFAULT,                       // 좌상 점 좌표.
CW_USEDEFAULT,                       // 우하 점 좌표.
CW_USEDEFAULT,                       // 가로 크기.
CW_USEDEFAULT,                       // 세로 크기.
NULL,                                         // 생성 윈도우의 부모 윈도우 핸들.  // NULL == 바탕화면이 부모
(HMENU)NULL,                            // 메뉴의 핸들
hInstance,                                   // 현재의 핸들
NULL );                                       // 왠만하면 NULL . . . . . ;;;;;;


ShowWindow(hWnd,nCmdShow); // hWnd 핸들에 저장된 설정대로 윈도우 창 출력.
//SW_HIDE : 숨김 /  ShowWindow(hWnd,SW_HIDE); 프로세스는 실행되나, 창은 뜨지않음. 
                                           


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 lParam)
{
 switch (iMessage) {
 case WM_DESTROY:
  PostQuitMessage(0);         
// Quit 메시지 전달.
  return 0;
 }

 // **중요** 기본작업(창 크기 설정, 창 이동 등등) 에 해당되는 메시지 처리.  *****
 // DefWindowProc 가 0이되면 아무것도 뜨지 않음.

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

반응형

SEARCH

태그로 찾아보기