본문 바로가기
API Programming

[API] 스켈레톤 기본 코드를 이용해서 기능 구현하기

by cod1ng 2024. 3. 6.

학교에서 했던 실습내용이다.

 

실습 내용은 마우스가 움직일 때 타이틀바에 마우스 좌표를 출력시키는 것이다.

 

 

일단 기본 스켈레톤 코드를 복사하자.

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