C++

[C++] Win32 API 메시지 박스

bo._.h 2023. 5. 3.
728x90
반응형

목차

1. 개요
2. 필요한 도구 및 라이브러리
3. 프로젝트 구조 및 파일 설명
4. 주요 코드 해석
5. 프로그램 실행 및 결과

1. 개요

- Win32 API를 사용하여 메시지 박스 띄우기 소개

이 예제에서는 기본적인 메시지 박스를 띄우는 간단한 프로그램 입니다.

 

1. 필요한 헤더 파일 포함 :

프로젝트에 필요한 헤더 파일들을 포함시킵니다.

#include "Windowsx.h"
#include "framwork.h"
#include "wchar.h"

2. 다이얼로그 프로시저 선언:

다이얼로그 이벤트 처리를 담당할 DlgProc 함수를 프로토타입으로 선언합니다.

INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

3. 메인 함수 정의:

프로그램의 진입점인 wWinMain 함수를 정의합니다. 여기서 DialogBox 함수를 사용하여 다이얼로그를 생성하고 DlgProc 함수를 콜백으로 전달합니다.

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DlgProc);
    return 0;
}

4. 다이얼로그 이벤트 처리:

다이얼로그 이벤트를 처리하는 DlgProc 함수를 정의합니다. 여기서는 다음과 같은 이벤트를 처리합니다.

WM_INITDIALOG: 다이얼로그 초기화
WM_CLOSE: 다이얼로그 닫기
WM_COMMAND: 다이얼로그에서 발생한 커맨드 처리

switch (message)
    {
    case WM_INITDIALOG: // 다이얼로그 초기화       
        return (INT_PTR)TRUE;

    case WM_CLOSE:  // 다이얼로그 닫기
        // 다이얼로그를 종료하고 프로그램을 종료합니다.
        EndDialog(hDlg, 0);
        return (INT_PTR)TRUE;

    case WM_COMMAND:    // 다이얼로그에서 발생한 커맨드를 처리합니다.
        if (LOWORD(wParam) == IDC_BUTTON_MSGBOX) {
        MessageBox(NULL, "Hello, World!", "Win32 C++ Example", MB_OK);
        }
    }

- 프로그램의 기능과 목적 간단히 설명

위 코드는 사용자가 "MsgBox" 버튼을 클릭하면 다음 동작을 수행합니다.

DlgBox에 있는 "MsgBoxBtn" 클릭시 "Hello,World!"가 메시지 박스로 출력됨.

2. 필요한 도구 및 라이브러리

- Visual Studio 2019 설치

Visual Studio 2019 설치를 진행할때 ' 데스크톱 및 모바일' 에 '.NET 데스크톱 개발 ' , ' C++를 사용한 데스크톱 개발 ' 을 체크하여 설치한다.  

C++을 사용한 데스크톱' 안에 있는 선택사항에서 '  최신 v142 빌드 도구용 C++ MFC ' , ' v142 빌드 도구용 C++/CU 지원 ', 'V142 빌드 도구용 C++ 모듈 ', ' Windows 10 SDK (10.0.17763.0)' 을 선택하여 설치한다.

 

- Win32 API에 대한 간단한 소개

 

Win32 API는 윈도우 컴퓨터에서 돌아가는 프로그램들이 운영체제의 다양한 기능을 사용할 수 있도록 도와주는 도구입니다. 이 도구를 이용해서 프로그램 작성자들은 화면에 그림을 그리거나, 파일을 열고 저장하고, 인터넷에 연결하는 등의 작업을 쉽게 할 수 있습니다.

 

- 사용된 라이브러리(Commctrl.h, Windowsx.h 등) 설명

이 프로그램에서 사용된 라이브러리는 다음과 같습니다.

framework.h: 프로젝트에 필요한 헤더 파일과 라이브러리를 포함하는 헤더 파일입니다. 이 파일은 프로젝트 템플릿에 의해 자동 생성되며, 필요한 헤더 파일과 라이브러리를 추가하거나 수정할 수 있습니다.

Windowsx.h: Windows 프로그래밍의 편의를 위해 추가된 헤더 파일로, 다양한 매크로 및 함수를 제공합니다. 이 헤더 파일을 사용하면 Win32 API를 보다 효율적으로 사용할 수 있습니다.

wchar.h: C 표준 라이브러리의 일부로, 와이드 문자 관련 함수를 제공하는 헤더 파일입니다. 이 프로그램에서는 _snwprintf_s 함수를 사용하여 문자열을 포맷팅하기 위해 이 헤더 파일이 포함되었습니다.

이 프로그램에서 사용된 라이브러리들은 Win32 API 프로그램 작성을 지원하며, 각각의 라이브러리는 고유한 기능과 컨트롤을 제공합니다. 사용자 인터페이스를 구성하고 이벤트 처리를 수행하기 위해 이러한 라이브러리들을 사용하였습니다.

5. 전체 코드

- 전체 코드 및 주석

// 필요한 헤더 파일들을 포함시킵니다.
#include "Windowsx.h"
#include "framwork.h"
#include "wchar.h"


// DigProc 함수를 프로토타입으로 선언합니다.
INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

// wWinMain 함수는 프로그램의 진입점입니다.
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    // 다이얼로그 박스를 생성하고 DigProc 함수를 콜백으로 전달합니다.
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DlgProc);
    return 0;
}

// DigProc 함수는 다이얼로그 이벤트에 대한 처리를 담당합니다.
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
        // 메시지에 따라 적절한 처리를 수행합니다.
    switch (message)
    {
    case WM_INITDIALOG: // 다이얼로그 초기화       
        return (INT_PTR)TRUE;

    case WM_CLOSE:  // 다이얼로그 닫기
        // 다이얼로그를 종료하고 프로그램을 종료합니다.
        EndDialog(hDlg, 0);
        return (INT_PTR)TRUE;

    case WM_COMMAND:    // 다이얼로그에서 발생한 커맨드를 처리합니다.
        if (LOWORD(wParam) == IDC_BUTTON_MSGBOX) {
        // DlgBox에서 "IDC_BUTTON_MSGBOX"의 ID를 가지고 있는 버튼을 클릭시 MSG 띄우기
        MessageBox(NULL, "Hello, World!", "Win32 C++ Example", MB_OK);
        }
    }

    return (INT_PTR)FALSE;
}


6. 프로그램 실행 및 결과

- 프로그램을 실행 결과

 


7. 마무리 및 추가 개선 방향

앞으로 Win32Api를 사용한 다양한 프로그램을 블로그로 작성해 보도록 하겠습니다.

추가 질문 사항 댓글로 작성해 주시면 친구 철지 답변드리겠습니다.

 

 

 

 

728x90
반응형

댓글