'Computer/WIN API'에 해당되는 글 2건

  1. 2009.01.05 문자열 출력
  2. 2009.01.04 API 1단계 윈도우 창 만들기.


#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,LPARAM,WPARAM);

HINSTANCE g_hInst;
LPSTR lpszClass = "TEXT OUT";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
 
 MSG Message;
 HWND hWnd;
 WNDCLASS WndClass;
 
 g_hInst = hInstance;
 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 = NULL;
 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,NULL,(HMENU)NULL,hInstance,NULL);
 ShowWindow(hWnd,nCmdShow);
  
 while(GetMessage(&Message,0,0,0)){
  TranslateMessage(&Message);
  DispatchMessage(&Message);
 }

 return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, LPARAM lParam, WPARAM wParam){
 HDC hdc;

 switch(iMessage){
 case WM_DESTROY :
  PostQuitMessage(0);
  return 0;
 case WM_LBUTTONDOWN :  //한번 출력해주고 끝남.
  hdc=GetDC(hWnd);
  TextOut(hdc,100,100,"helloworld",10);
  ReleaseDC(hWnd,hdc);
  return 0;
 }
 return (DefWindowProc(hWnd,iMessage,lParam,wParam));
}

 /* 윈도우즈는 세가지 DLL로 구성되어있다.
  * KERNEL - 메모리를 관리하고 프로그램을 실행시킴
  * USER - 유저 인터페이스와 윈도우를 관리
  * GDI - 화면 처리와 그래픽을 담당
  * DC(Device Context) - 출력에 필요한 모든 정보를 가지는 데이터 구조체 GDI 모듈에 의해 관리
  */

Posted by Triton
,

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="HELLOWORLD";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInsance, LPSTR lpszCmdParam, int nCmdShow){
  /*HINSTANCE hInstance  - 프로그램 핸들
  *HINSTANCE hPrevInstance - 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들, 없을 경우 NULL, WIN32에서는 항상 NULL
  *LPSTR lpszCmdLine - 명령행으로 입력된 프로그램 인수. 도스의 argv에 해당.
  *int nCmdShow - 프로그램이 실행될 형태이며, 보통모양 등이 전달된다.
  */
 HWND hWnd;
 MSG Message;
 WNDCLASS WndClass;
 g_hInst = hInstance; //Instance 날아가서 나중을 위해 저장

 WndClass.cbClsExtra=0; //예약 영역
 WndClass.cbWndExtra=0; //예약영역
 WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //윈도우의 배경 색상 GetStockObject라는 함수 이용 WHITE_BRUSH가 보통 쓰임.
 WndClass.hCursor=LoadCursor(NULL, IDC_ARROW); //커서 디폴트
 WndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION); //아이콘 디폴트(창모양)
 WndClass.hInstance=hInstance; //클래스를 사용하는 프로그램의 번호 인수로 전달된 값 그대로 hInstance
 WndClass.lpfnWndProc=(WNDPROC)WndProc; //윈도우의 메시지 처리 함수를 지정.
 WndClass.lpszClassName=lpszClass; //윈도우 클래스의 이름을 정한다.
 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,(HMENU)NULL,hInstance,NULL);
                  //ClassName,WindowName,dwStyle,      X,  Y,  WIDTH,  HEIGHT,                hWndParent, hMenu, hInstance, lpvParm

 ShowWindow(hWnd,nCmdShow);
 while(GetMessage(&Message,0,0,0)){ //FALSE 가 아닐때까지 계속 돔.
  TranslateMessage(&Message); //키보드에서 받은 메세지 번역.
  DispatchMessage(&Message); //처리해 달라.
 }
 return Message.wParam; //WM_QUIT 메시지로부터 전달된 탈출 코드.
}
                        //핸들       어떤 종류의 메시지인가.         
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){
 switch(iMessage){
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
 //DefWindowProc 함수는 위에서 처리해주지 않는 나머지 메시지에 대해 관한 처리를 해준다.
}


 

Posted by Triton
,