#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공부하실분들 ^_^
내가 듣고싶은 음악
내가 들려주고싶은 음악













