반응형

Visual Studio 2022에서 WinAPI(  Windows API )를 사용한 프로그램을 작성하는 방법을 설명합니다.



Visual Studio 2022 설치하는 방법은 다음 포스팅을 참고하세요

 

C++, Win32 API, MFC 개발을 위해 Visual Studio Community 2022 설치하는 방법

https://webnautes.tistory.com/2058





2022. 5. 14 - 최초작성




1. Create a new project를 선택합니다.

 



2. Windows 데스크톱 마법사(Windows Desktop Wizard)를 선택하고 Next 버튼을 클릭합니다. 

 



Project name을 적고 Create 버튼을 클릭합니다.

 



3. Desktop Application을 선택하고 Empty project를 체크합니다.

 



4. Resource View에 보이는 프로젝트 이름에서 마우스 우클릭하여 보이는 메뉴에서 Add > Resource를 선택합니다. 

Resource View가 보이지 않으면 Ctrl + Shift + E를 누릅니다. 

 



5. Add Resource이 보이면 Dialog를 선택하고 New을 클릭합니다.

 



6. 화면에 다이얼로그가 보입니다. Ctrl + S를 눌러 저장합니다. 

 



리소스 뷰에도  다이얼로그가 추가됩니다.

 



7. 각 항목을 선택하여 ID를 확인해둡니다.

 

다이얼로그 IDD_DIALOG1  

OK 버튼 IDOK

Cancel 버튼 IDCANCEL



8. 솔루션 탐색기에서 Source Files을 선택하고  마우스 우클릭하면 보이는 메뉴에서 Add > New Item을 선택합니다.

 



9. C++ File(cpp)를 선택하고  Add 버튼을 클릭합니다.

 



10. 앞에서 확인했던 ID를 이용해서 Windows API 코드를 수정한 상태입니다. 다음 코드를 복사하여 추가한 파일에 붙여넣기합니다.

 

코드 출처 - http://www.winprog.org/tutorial/dialogs.html

#include <windows.h>
#include "resource.h" 

HBRUSH g_hbrBackground = NULL;

BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
	int msgboxID;

	switch (Message)
	{
	case WM_INITDIALOG:
		g_hbrBackground = CreateSolidBrush(RGB(128, 128, 128));

		SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,
			MAKEINTRESOURCE(IDI_APPLICATION)));
		SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL,
			MAKEINTRESOURCE(IDI_APPLICATION)));
		break;
	case WM_CLOSE:
		EndDialog(hwnd, 0);
		break;
	case WM_CTLCOLORDLG:
		return (LONG)g_hbrBackground;
	case WM_CTLCOLORSTATIC:
	{
		HDC hdcStatic = (HDC)wParam;
		SetTextColor(hdcStatic, RGB(255, 255, 255));
		SetBkMode(hdcStatic, TRANSPARENT);
		return (LONG)g_hbrBackground;
	}
	break;
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			msgboxID = MessageBox(hwnd, L"OK 버튼이 눌러졌습니다. 프로그램을 종료할까요?", L"정보", MB_YESNO);

			if (msgboxID==6) EndDialog(hwnd, 0);
			break;
		case IDCANCEL:
			msgboxID = MessageBox(hwnd, L"CANCEL 버튼이 눌러졌습니다. 프로그램을 종료할까요?", L"정보", MB_YESNO);
			
			if (msgboxID == 6) EndDialog(hwnd, 0);
			break;
		}
		break;

	case WM_DESTROY:
		DeleteObject(g_hbrBackground);
		break;
	default:
		return FALSE;
	}
	return TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow)
{
	return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
}

 

 

12. 툴바에서 x86으로 변경합니다.

 




13. F5를 눌러 실행합니다. 실행결과입니다.

 

 

 




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts