학교에서 했던 실습내용이다.
실습 내용은 마우스가 움직일 때 타이틀바에 마우스 좌표를 출력시키는 것이다.
일단 기본 스켈레톤 코드를 복사하자.
//05_skeleton코드.cpp
#pragma comment (linker, "/subsystem:windows")
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpCmdLine, int nShowCmd)
{
WNDCLASS wc;
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hIcon = LoadIcon(0, IDI_APPLICATION);
wc.hInstance = hInst;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = TEXT("First");
wc.lpszMenuName = 0;
wc.style = 0;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(0, TEXT("First"), TEXT("Hello"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 500, 500, 0, 0, hInst, 0);
ShowWindow(hwnd, SW_SHOW);
//UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
//TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
앞서 말했듯이 윈도우 프록시저에는 기능을 추가하려면 switch-case 문을 추가해야한다.
윈도우 프로시저에 마우스가 움직인다는 메시지를 등록한다. (return 0을 하지 않으면 무한루프가 발생하니 조심하자.)
case WM_MOUSEMOVE:
{
}
return 0;
마우스 좌표는 IParam 의 상위 2byte 는 y값 하위 2byte는 x값이 있다고 한다.
POINTS pt = MAKEPOINTS(lParam);
타이틀바에 출력 해보자.
TCHAR buf[100];
wsprintf(buf, TEXT("%d,%d"), pt.x, pt.y);
SetWindowText(hwnd, buf);
pt.x와 pt.y는 마우스의 현재 좌표가 될것이다
최종 코드
case WM_MOUSEMOVE:
{
POINTS pt = MAKEPOINTS(lParam);
TCHAR buf[100];
wsprintf(buf, TEXT("%d,%d"), pt.x, pt.y);
SetWindowText(hwnd, buf);
}
'API Programming' 카테고리의 다른 글
[API] 메시지 프로시저 호출하기 SendMessage & PostMessage (1) | 2024.03.06 |
---|---|
[API] 메시지 큐에서 메시지 가져오기 (0) | 2024.03.06 |
[API] skeleton 코드 (0) | 2024.03.06 |
[API] 메시지 ~ 윈도우 프로시저(Window Procedure) 란? (0) | 2024.03.06 |
윈도우 클래스 & 윈도우 객체 (0) | 2024.03.06 |