반응형

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




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

C++, Win32 API, MFC 개발을 위해 Visual Studio Community 2022 설치하는 방법
https://webnautes.tistory.com/1681 

 

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를 눌러 실행합니다. 실행결과입니다.

 

 

 



반응형

해보고 확인한 것을 문서화하여 기록합니다.


부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.

질문을 남겨주면 가능한 빨리 답변드립니다.


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

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">