GDI ¶
GDI(Graphics Device Interface)란 라 그리기를 는데 되는 다. 디 력과 린 그래 력 고 는 부다. 가 Windows로 는 로그램 GDI를 각 보를 력 뿐 라 Windows GDI를 메뉴, 롤 바, , 그리고 같 각 력 다.
DC ¶
DC(Device Context)는 GDI 내부로 관리되는 데 구며 그래 기 것다. 그림 그리고 때는 반드 먼 DC 대 들 다. 로그램 들 는 것로 Windows는 가 그 를 록 가 다. 그러면 들 GDI 로 그리고 는 를 Windows가 록 다.
- 들 : 들라는 말 말그대로 들다.
를 들면 동를 때 동들 /로 면 동를 듯 들 를 기 것다.
DC 들 기 ¶
WM_PAINT ¶
¶
~cpp #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; WNDCLASS wc; MSG mSg; char szTitleName[]="Drawing Line"; char szClassName[]="it is a class"; wc.cbClsExtra=NULL; wc.cbWndExtra=NULL; wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); wc.hInstance=hInst; wc.lpfnWndProc=WndProc; wc.lpszClassName=szClassName; wc.lpszMenuName=NULL; wc.style=NULL; RegisterClass(&wc); hWnd=CreateWindow(szClassName,szTitleName, WS_OVERLAPPEDWINDOW,100,90,320,240,NULL,NULL,hInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&mSg,NULL,0,0)) { TranslateMessage(&mSg); DispatchMessage(&mSg); } return mSg.wParam; } LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hDC; HPEN hPen; PAINTSTRUCT ps; static int nSX,nSY,nEX,nEY; static POINT pt; static BOOL bTF; switch(uMsg) { case WM_LBUTTONDOWN: { bTF = TRUE; nSX=LOWORD(lParam); nSY=HIWORD(lParam); } return FALSE; case WM_LBUTTONUP: { bTF=FALSE; nEX=LOWORD(lParam); nEY=HIWORD(lParam); InvalidateRect(hWnd,NULL,FALSE); } return FALSE; case WM_PAINT: { if(bTF==FALSE) { hPen=CreatePen(PS_SOLID,0,RGB(0,0,0)); hDC=BeginPaint(hWnd,&ps); SelectObject(hDC,hPen); SelectObject(hDC, GetStockObject(NULL_BRUSH)); MoveToEx(hDC,nSX,nSY,&pt); LineTo(hDC,nEX,nEY); DeleteObject(hPen); EndPaint(hWnd,&ps); } } return FALSE; case WM_DESTROY: PostQuitMessage(0); return FALSE; } return DefWindowProc(hWnd,uMsg,wParam,lParam); }