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); }