U E D R , A S I H C RSS

5인용C++스터디/윈도우에그림그리기

GDI


GDI(Graphics Device Interface) . . Windows GDI Windows GDI , , , 행한.

DC


DC(Device Context) GDI . DC 한 핸 . Windows . GDI 함 Windows .

  • : .
    / .

DC 핸


DC 핸 WM_PAINT BeginPaint EndPaint .

hdc = BeginPaint (hwnd, &ps);

EndPaint (hwnd, &ps);

한 핸.
ps PAINTSTRUCT 형 . PAINTSTRUCT .

WM_PAINT


WinMain UpdateWindow . .

WM_PAINT BeginPaint 한 호 .

hdc = BeginPaint (hwnd, &ps);

EndPaint .

EndPaint (hwnd, &ps);

한 핸. PAINTSTRUCT 형 한 포. PAINTSTRUCT .

WndProc BeginPaint GetClientRect.

GetClientRect(hwnd, &rect);

한 핸. RECT형 한 포.

~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);
	}
~cpp 
                               hPen=CreatePen(PS_SOLID,0,RGB(0,0,0)); 
                               hDC=BeginPaint(hWnd,&ps); 
                               Ellipse(hDC,nSX,nSY,nEX,nEY);
                               EndPaint(hWnd,&ps); 

  • CreatePen() : 펜 .
  • SelectObject() : CreatePen() .
  • LineTO() : 할.
  • DeleteObject() : CreatePen()함 한 펜 할.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:19
Processing time 0.0316 sec