GDI에서 기본적으로 제공하는 Object.

HGDIOBJ GetStockObject(int fnObject);

BLACK_BRUSH
GRAY_BRUSH
NULL_BRUSH(투명)
WHITE_BRUSH
DKGRAY_BRUSH
LTGRAY_BRUSH
DC_BRUSH(색상 브러시, SetDCBrushColor로 색 설정)
BLACK_PEN
WHITE_PEN
NULL_PEN
DC_PEN(색상 펜, SetDCPenColor 함수로 설정)
ANSI_FIXED_FONT 고정폭 폰트
ANSI_VAR_FONT 가변폭 폰트
DEFAULT_PALETTE 시스템 기본 팔레트


사용 예

#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.hCursor = LoadCursor(NULL, IDC_ARROW);
 WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
 WndClass.hInstance = hInstance;
 WndClass.lpfnWndProc=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,NULL,0,0))
 {
  TranslateMessage(&Message);
  DispatchMessage(&Message);
 }

 return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 HBRUSH MyBrush,OldBrush;

 switch(iMessage)
 {
 case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  (HBRUSH)SelectObject(hdc,GetStockObject(GRAY_BRUSH));
  Rectangle(hdc,50,50,300,200);
  EndPaint(hWnd,&ps);
  return 0;
 case WM_DESTROY : PostQuitMessage(0);
  return 0;
 }
 return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}

'Programming > Visual C++' 카테고리의 다른 글

그래픽4. Brush  (0) 2011.06.30
그래픽3. PEN  (0) 2011.06.30
그래픽 1. GDI Object  (0) 2011.06.30
기타. SendMessage - Message 강제 호출  (0) 2011.06.30
타이머.  (0) 2011.06.29
GDI(Graphic Device Interface) Object. 화면, 프린터등의 모든 출력 장치를 제어하는 윈도우즈 핵심 모듈중 하나.
 EX) 펜, 브러시, 비트맵, 폰트 등.

DC가 일종의 GDI를 모아놓은 것.
사용자는 DC를 사용할때 적절한 Object를 선택해서 사용할수 있다.(적절한 펜, 브러쉬, 폰트 등)
만약 선택하지 않으면 알아서 Default로 선택되는 것들도 있다.

펜 HPEN 선을 그릴때 사용, (Default)검정색의 가는 실선
브러시 HBRUSH 면을 채울때 사용 (Default) 흰색
폰트 HFONT 문자 출력에 사용되는 글꼴(Default)시스템 글꼴
비트맵 HBITMAP 비트맵 이미지 (Default)없음
팔레트 HPALETTE 색상을 선택할수 있는 팔레트 (Default)없음


'Programming > Visual C++' 카테고리의 다른 글

그래픽3. PEN  (0) 2011.06.30
그래픽2. StockObject  (0) 2011.06.30
기타. SendMessage - Message 강제 호출  (0) 2011.06.30
타이머.  (0) 2011.06.29
기타. WM_CREATE  (0) 2011.06.29
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam,LPARAM lParam);
강제로 메시지가 발생한것처럼 만든다.
Timer같은경우에도 함수 발생후 1초가 지나야 메시지가 발생하므로 그것을 강제로 하기위해서 필요하다.

case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
SendMessage(hWnd,WM_TIMER,1,0);

요롷게 해주면된다.

'Programming > Visual C++' 카테고리의 다른 글

그래픽2. StockObject  (0) 2011.06.30
그래픽 1. GDI Object  (0) 2011.06.30
타이머.  (0) 2011.06.29
기타. WM_CREATE  (0) 2011.06.29
입력5. 마우스  (0) 2011.06.29


LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 SYSTEMTIME st;
 static TCHAR sTime[128];

 switch(iMessage)
 {
 case WM_CREATE:
  SetTimer(hWnd,1,1000,NULL);
  return 0;
 case WM_TIMER:
  GetLocalTime(&st);
  wsprintf(sTime,TEXT("지금 시간은 %d:%d:%d입니다."),st.wHour,st.wMinute,st.wSecond);
  InvalidateRect(hWnd,NULL,TRUE);
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  TextOut(hdc,100,100,sTime,lstrlen(sTime));
  EndPaint(hWnd,&ps);
  return 0;
 case WM_DESTROY:
  KillTimer(hWnd,1);
  PostQuitMessage(0);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

자, 여기서
UINT SetTimer(HWND hWnd,UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
에 대해 알아보도록하자.

nIDEvent는 타이머의 번호를 지정한다.
uElapse는 타이머의 주기를 설정한다. 단위는 1/1000초. == 1초에 한번씩 타이머 메시지가 hWnd로 전달된다.
10000이면 10초에 한번씩 타이머 메시지가 발생한다.
TIMERPROC lpTimerFunc는 타이머 메시지가 발생할 때마다 호출될 함수를 지정. 사용하지 않을경우 NULL.

'Programming > Visual C++' 카테고리의 다른 글

그래픽 1. GDI Object  (0) 2011.06.30
기타. SendMessage - Message 강제 호출  (0) 2011.06.30
기타. WM_CREATE  (0) 2011.06.29
입력5. 마우스  (0) 2011.06.29
입력3. TranslateMessage  (0) 2011.06.29
WndProc에서 첫 번째로 처리하는 메시지로 윈도우가 처음 생성될 때 발생, 초기화에 이용.

'Programming > Visual C++' 카테고리의 다른 글

기타. SendMessage - Message 강제 호출  (0) 2011.06.30
타이머.  (0) 2011.06.29
입력5. 마우스  (0) 2011.06.29
입력3. TranslateMessage  (0) 2011.06.29
입력2. WM_KEYDOWN  (0) 2011.06.29

+ Recent posts