#include<windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("MOUSE");
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 | CS_DBLCLKS;
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;
static int x;
static int y;
static BOOL bNowDraw=FALSE;
switch(iMessage)
{
case WM_LBUTTONDOWN:
x=LOWORD(lParam);
y=HIWORD(lParam);
bNowDraw=TRUE;
return 0;
case WM_MOUSEMOVE:
if(bNowDraw == TRUE)
{
hdc=GetDC(hWnd);
MoveToEx(hdc,x,y,NULL);
x=LOWORD(lParam);
y=HIWORD(lParam);
LineTo(hdc,x,y);
ReleaseDC(hWnd,hdc);
}
return 0;
case WM_LBUTTONUP:
bNowDraw=FALSE;
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
.gif)
MoveToEx, LineTo 함수를 통해서 윈도우 창에 마우스포인터의 위치에 선을 찍는 프로그램
동작 개요
- 윈도우를 생성한다.
- 마우스 왼쪽 버튼 (WM_LBUTTONDOWN) 이벤트 발생시 현재 좌표를 각각 x,y 변수에 저장한다.
(MoveToEx함수)
- bNowDraw변수가 TRUE값으로 적용된다.
- 버튼이 눌린채로 이동(WM_MOUSERMOVE) 하게되면 화면에 선을 출력한다.(LineTo함수)
- 버튼을 떼면(WM_LBUTTONUP) bNowDraw변수의 값이 FALSE로 적용되고 이동을 하여도
선을 그리지 않는다.
● #define LOWORD(l) ((WORD)(l))
#defune HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
- WORD lParam 변수로부터 상 하위 워드를 추출한다. lParam에서 LOWORD는 X값 좌표를 HIWORD는 Y값 좌표를 반환한다.
● BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint);
- MoveToEx함수는 현재 DC핸들에 저장된 좌표값을 X,Y변수가 저장하는 역할을 한다.
|
인수 |
값 |
|
hdc |
DC핸들 |
|
X |
현재위치의 X좌표 |
|
Y |
현재위치의 Y좌표 |
|
lpPoint |
이전 좌표를 돌려받기위한 포인터 좌표가 필요없을시 NULL반환 |
● BOOL LineTo(HDC hdc, int nXEnd, int nYEnd);
- 현재위치에서부터 nXEnd, nYEnd 좌표까지를 선을 긋는 함수.
|
인수 |
값 |
|
hdc |
DC핸들 |
|
nXEnd |
끝점의 X좌표 |
|
nYEnd |
끝점의 Y좌표 |
- 함께 API공부하실분들 ^_^
내가 듣고싶은 음악
내가 들려주고싶은 음악
authentic nfl jerseys
they can be used on as wellcoach bags on sale
may most likely needcoach outletonline
bags might as well buycoach outlet online
Many people can likecoach bags outlet
porary fashionablecoach bags outlet
together with lifestylecoach outlet store
well known greatwholesale designer bags
comfortable with itcheap coach
very coolwholesale nfl jerseys
We love to buyauthentic jerseys
Look beautiful bag charm