티스토리 뷰
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("MemoryDC");
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);
hWndMain=hWnd;
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, MemDC;
HBITMAP OldBitmap;
static HBITMAP NewBitmap;
static POINT point;
static BOOL bnowDraw=FALSE;
PAINTSTRUCT ps;
switch(iMessage) {
case WM_CREATE:
hdc=GetDC(hWnd);
NewBitmap=CreateCompatibleBitmap(hdc,1024,768);
MemDC=CreateCompatibleDC(hdc);
OldBitmap=(HBITMAP)SelectObject(MemDC, NewBitmap);
SelectObject(MemDC, GetStockObject(WHITE_PEN));
Rectangle(MemDC, 0,0,1024,768);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
ReleaseDC(hWnd, hdc);
return 0;
case WM_LBUTTONDOWN:
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
bnowDraw=TRUE;
return 0;
case WM_MOUSEMOVE:
if (bnowDraw==TRUE) {
hdc=GetDC(hWnd);
MemDC=CreateCompatibleDC(hdc);
OldBitmap=(HBITMAP)SelectObject(MemDC, NewBitmap);
MoveToEx(hdc,point.x,point.y,NULL);
MoveToEx(MemDC,point.x,point.y,NULL);
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
LineTo(hdc,point.x,point.y);
LineTo(MemDC,point.x,point.y);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
ReleaseDC(hWnd,hdc);
}
return 0;
case WM_LBUTTONUP:
bnowDraw=FALSE;
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
MemDC=CreateCompatibleDC(hdc);
OldBitmap=(HBITMAP)SelectObject(MemDC, NewBitmap);
BitBlt(hdc,0,0,1024,768,MemDC,0,0,SRCCOPY);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
EndPaint(hWnd, &ps);
return 0;
case WM_RBUTTONDOWN:
case WM_DESTROY:
DeleteObject(NewBitmap);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
// Copyright @ H.K.
// Last Update : 2009-01-21