#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="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.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,
    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,WPARAM wParam,LPARAM lParam)
{
 switch(iMessage) {
 case WM_LBUTTONDOWN: // 마우스 왼쪽 버튼을 누르면 발생하는 메시지.
  MessageBox(hWnd, TEXT("마우스 왼쪽 버튼을 눌렀습니다"), TEXT("메시지 박스"), MB_OK); // MessageBox 함수 호출.
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}



출력결과:

'[+] Information > [-] ETC' 카테고리의 다른 글

군대가기전에 TIP  (10) 2009.12.21
[Tip] 메모리에 written, read 될 수 없습니다??  (2) 2009.09.27
API MessageBox 예제  (2) 2009.07.20
API GraphOut 예제  (0) 2009.07.20
API DrawText 예제  (0) 2009.07.18
  1. Favicon of http://zzibong.dyndns.org BlogIcon zzibong 2009.10.01 17:33

    어디까지 공부하셨어요? ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.10.01 18:01 신고

      이것저것 바쁜일 때문에 별로 하진 못했어요.. ㅠㅠ

      그래도 포스팅한것보다는 많이 ㅎㅎ

#include <windows.h>

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

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.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,
    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,WPARAM wParam,LPARAM lParam)
{
 HDC hdc; // DC 핸들을 저장할 변수 선언.
 PAINTSTRUCT ps; // DC 정보를 담고 있는 구조체 선언.
 
 switch(iMessage) {
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps); // DC 핸들을 hdc 변수에 저장.
  SetPixel(hdc,10,10,RGB(255,0,0)); // SetPixel 함수를 이용하여 (10,10) 지점에 빨간색 점을 찍음.
  MoveToEx(hdc,50,50,NULL);
  LineTo(hdc,300,90);
  /* MoveToEx 함수와 LineTo 함수를 이용해 선을 그었음. */
  Rectangle(hdc,50,100,200,180); // 사각형을 그림.
  Ellipse(hdc,220,100,400,200); // 타원형을 그림.
  EndPaint(hWnd,&ps);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}



출력 결과:



이번에도 메시지를 처리하는 WndProc만 바꼈습니다 ㅎㅎ

위에 LPSTR lpszClass="GraphOut"; 이건 프로그램 제목을 표시하기 위해 예제와 똑같은 이름으로 계속 바꿔주는 것뿐 ㅋㅋ

'[+] Information > [-] ETC' 카테고리의 다른 글

[Tip] 메모리에 written, read 될 수 없습니다??  (2) 2009.09.27
API MessageBox 예제  (2) 2009.07.20
API GraphOut 예제  (0) 2009.07.20
API DrawText 예제  (0) 2009.07.18
API TextOut 예제  (0) 2009.07.18

#include <windows.h> /* 기본적인 데이터 타입, 함수 원형, 매크로 상수 정의 헤더파일 */

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

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
    ,LPSTR lpszCmdParam,int nCmdShow) /* 윈도우즈 프로그램의 시작점은 Main이 아닌 WinMain이다. EP(Entry Point) */
    /* hInstance : 프로그램의 인스턴스 핸들이다. */
    /* hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들이다. 없을 경우는 NULL이 되며 Win32에서는 항상 NULL이다.
    16비트와의 호환성을 위해서만 존재하는 인수이므로 신경쓰지 않아도 된다. 역사가 오래되다 보니 어쩔 수 없이 생기는 일종의 찌꺼기이다. */
    /* lpszCmdParam : 명령행으로 입력된 프로그램 인수이다. 도스의 argv인수에 해당하며 보통 실행직후에 열 파일의 경로가 전달 된다. */
    /* nCmdShow : 프로그램이 실행될 형태이며 최소화, 보통 모양 등이 전달된다. */
{
 HWND hWnd;
 MSG Message;
 WNDCLASS WndClass;
 g_hInst=hInstance;
 
 WndClass.cbClsExtra=0; /* 일종의 예약 영역, 예약 영역을 사용하지 않을 경우 0으로 지정 */
 WndClass.cbWndExtra=0; /* 일종의 예약 영역, 예약 영역을 사용하지 않을 경우 0으로 지정 */
 WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); /* 윈도우의 배경 색상을 지정한다. */
 WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); /* 마우스 커서 지정 */
 WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); /* 아이콘 지정 */
 WndClass.hInstance=hInstance; /* 이 윈도우 클래스를 등록하는 프로그램 번호이며 WinMain의 인수로 전달된 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,
    NULL,(HMENU)NULL,hInstance,NULL); /* CreateWindow : 윈도우 생성*/
 ShowWindow(hWnd,nCmdShow);
 
 while(GetMessage(&Message,0,0,0)) {
  TranslateMessage(&Message);
  DispatchMessage(&Message);
 }
 return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 RECT rt={100,100,400,300}; /* RECT 구조체에 멤버 값 초기화.(left,top,right,bottom) */
 TCHAR *str=TEXT("님은 갔습니다. 아아 사랑하는 나의 님은 갔습니다. 푸른 산빛을 "
  "깨치고 단풍나무 숲을 향하여 난 작은 길을 걸어서 차마 떨치고 갔습니다."
  "황금의 꽃같이 굳고 빛나던 옛 맹세는 차디찬 티끌이 되어 한숨의 미풍에 "
  "날아갔습니다.");

 switch(iMessage) {
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  DrawText(hdc,str,-1,&rt,DT_CENTER|DT_WORDBREAK);
  EndPaint(hWnd,&ps);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}



출력 결과:



공부하고 다음 글을 보니.. 편해보이지만 TextOut 함수보다 덜 쓰인다고 하네요 ㅎㅎ

별로 쓰이지 않는다고 하더군요 ㅋㅋ

'[+] Information > [-] ETC' 카테고리의 다른 글

API MessageBox 예제  (2) 2009.07.20
API GraphOut 예제  (0) 2009.07.20
API DrawText 예제  (0) 2009.07.18
API TextOut 예제  (0) 2009.07.18
첫번째 예제  (0) 2009.07.16

+ Recent posts