undefined

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


api(lineto).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공부하실분들 ^_^

내가 듣고싶은 음악
내가 들려주고싶은 음악