웹사이트(https://visualstudio.microsoft.com/ko/vs/)에서 [Visual Studio 다운로드]를 클릭하고 VisualStudioSetup.exe 파일 실행시키기

MFC를 이용하기 위해 C++를 사용한 데스크톱 개발에서 'C++ MFC(x86 및 x64)'를 선택한 후 설치
Visual Studio 2022를 실행시켜 시작 화면에서 [새 프로젝트 만들기]를 선택

[새 프로젝트 만들기]를 선택한 후 [Windows 데스크톱 마법사] 템플릿을 선택하고 다음 버튼

찾지 못하였다면 하단의 [추가 도구 및 기능 설치]를 클릭한 후 설치

[새 프로젝트 구성]의 [프로젝트 이름]에 프로젝트 이름을 입력하고 default 값을 그래도 두고 만들기 버튼

[애플리케이션 종류] 콤보 박스에서 [데스크톱 애플리케이션(.exe)] 항목을 선택한 후 [추가 옵션]에서 [빈 프로젝트]를 체크하고 확인 버튼 누르면 프로젝트가 만들어짐

프로젝트가 생성되면 [솔루션 탐색기]의 [소스 파일]을 오른쪽 마우스를 눌러 [추가] - [새 항목]을 선택

cpp파일에 소스 코드 입력
draw.cpp
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASS WndClass; // 윈도우 클래스 구조체
HWND hwnd; // 윈도우 핸들
MSG msg; // 메시지 구조체
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc; // 윈도우 프로시저
WndClass.cbClsExtra = 0; // 윈도우 클래스 데이터영역
WndClass.cbWndExtra = 0; // 윈도우 데이터 영역
WndClass.hInstance = hInstance; // 인스턴스 핸들
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 아이콘 핸들
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // 커서 핸들
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// 배경 브러시 핸들(밝은 회색배경)
WndClass.lpszMenuName = NULL; // 메뉴 이름
WndClass.lpszClassName = TEXT("Mclass"); // 윈도우 클래스 이름
if (!RegisterClass(&WndClass)) return 1; // 윈도우 클래스 register
hwnd = CreateWindow( // 윈도우 생성 API 함수
TEXT("MClass"), // 등록된 윈도우 클래스 이름
TEXT("마우스로 그림그리기"), // 타이틀바에 출력될 문자
WS_OVERLAPPEDWINDOW, // 윈도우 스타일
CW_USEDEFAULT, // 윈도우좌측상단의 x좌표
CW_USEDEFAULT, // 윈도우좌측상단의 y좌표
CW_USEDEFAULT, // 윈도우의 너비
CW_USEDEFAULT, // 윈도우의 높이
NULL, // 부모 윈도우의 핸들
NULL, // 메뉴 또는 자식 윈도우의 핸들
hInstance, // 어플리케이션 인스턴스 핸들
NULL // 윈도우 생성 데이터의 주소
);
ShowWindow(hwnd, nCmdShow); // 프레인 윈도우를 화면에 표시
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
static POINT MousePos; // 마우스 x,y 좌표를 저장할 변수
static BOOL bDrawing = FALSE;
switch (iMessage) {
case WM_LBUTTONDOWN:
MousePos.x = LOWORD(lParam);
MousePos.y = HIWORD(lParam);
bDrawing = TRUE;
SetCapture(hWnd);
return 0;
case WM_MOUSEMOVE:
if (bDrawing == TRUE) {
hdc = GetDC(hWnd);
MoveToEx(hdc, MousePos.x, MousePos.y, NULL);
MousePos.x = LOWORD(lParam);
MousePos.y = HIWORD(lParam);
LineTo(hdc, MousePos.x, MousePos.y);
ReleaseDC(hWnd, hdc);
}
return 0;
case WM_LBUTTONUP:
bDrawing = FALSE;
ReleaseCapture();
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
[Ctrl + F5] 키를 눌러서 프로그램을 실행시키거나 로컬 Windows 디버거를 클릭해서 실행