온백의 코딩 블로그

온백의 비밀 기록방

Note/C language

'C언어'로 "알림창" 띄우기! - "메시지 박스" MessageBox() 사용법

온백 hundred_100 2023. 3. 26. 23:35

안녕하세요, 온백입니다.

또 정말 오랜만에 글이네요...

 

글 주제를 못 찾다가 오늘 새로운 함수를 찾아서 정리 겸 올려보려고 합니다..!

(혹시 hWnd에 대해 쉽게 설명해 주실 분 있으시면 알려주세요..! 완벽히 이해가..)

 

알림창 만들기 - MessageBox() 사용법

 

기본 사용법

 

"MessageBox()"는 "windows.h" 헤더파일에 있는 함수로,

알림창, 즉 메시지 박스를 화면에 출력할 수 있습니다.

 

#include <windows.h>

/* =============================== */

MessageBox(hWnd, "출력할 내용", "박스의 제목", 유형 지정);

 

앞에 hWnd 부분은 말 그대로 hWnd(메세지 상자가 있는 핸들)이고, 일반적으로 NULL을 쓰시면 됩니다.

출력할 내용과 박스의 제목은 LPCTSTR( Long Pointer Constant t_string == const t_char * / 유니코드 지원해서 2byte) 타입으로 받아집니다.

 

뒤에 유형 지정 부분은 박스의 선택 부분을 어떻게 할건지 결정하는 겁니다.

즉, 알림창에서 확인만 누르도록 할건지, 경고창인지, 에러창인지, 확인이나 취소인지 등을 지정해줍니다.

 

이 코드가 실행될 때는 다음 코드가 바로 실행되지 않고, 메시지 박스와 상호작용을 해야 다음으로 넘어갑니다.

 

이걸로 코드를 짜보면..

#include <windows.h>

int main() {
    MessageBox(NULL, TEXT("Hello, World!"), TEXT("Test"), MB_OK);
}

 

위의 코드를 실행했을 때 뜨는 메시지 박스

 

그런데.. 내용과 제목 부분에 TEXT()가 감싸고 있네요..?

 

이 매크로는 문자열 리터럴을 TCHAR로 바꿔주는데,

유니코드, 멀티바이트 문자열로 사용 가능하도록 바꿔준다고 합니다.

(이걸 빼면 오류가 나죠)

박스 스타일 바꾸기

 

MB_OK 부분은 다른 것들로 교체가 가능합니다.

많은 것들이 있지만 몇 가지만 작성해볼까 합니다.

(나머지는 chat GPT한ㅌ..)

 

< 박스 스타일 >
MB_OK 확인
MB_OKCANCEL 확인, 취소
MB_YESNO 예, 아니요
MB_YESNOCANCEL 예, 아니요, 취소
MB_RETRYCANCEL 다시 시도, 취소
MB_ICONINFORMATION 정보 아이콘
MB_ICONWARNING 경고 아이콘
MB_ICONERROR 에러 아이콘
MB_ICONSTOP 중지 아이콘

 

찾아보니까 더 많더라고요.. (여기 있는 거 저도 다 안 써봤어요..)

잘 보시면 버튼과 아이콘으로 나눠져 있는데,

이런 느낌입니다.

 

MB_INFORMATION - 이거 하나만 쓰고 버튼 지정 안해줘도 작동이 되네요

 

이건 MB_INFORMATION을 한건데, 앞에 정보 표시가 떴죠.

 

"|" 을 붙여 두 옵션을 붙일 수 있습니다..!

경고 표시와 예, 아니오, 취소를 붙여보도록 하죠.

 

#include <windows.h>

int main() {
    int result = MessageBox(NULL, TEXT("당신이 귀엽다고요?"), TEXT("경고"), MB_ICONWARNING | MB_YESNOCANCEL);

    return 0;
}

 

(문구는 의도 맞습니ㄷ..크흠)

 

번외

 

그래서 이걸 응용해서 하나 만들어 본 게 있습니다.

열심히 만든 것이니 꼭 실행시켜 보시길..

 

#include <windows.h>

int Message() {
	return MessageBox(NULL, TEXT("\"여친\"을(를) 찾을 수 없습니다."), TEXT("Brain"), MB_RETRYCANCEL | MB_ICONERROR);
}

int main() {
	int i = MessageBox(NULL, TEXT("\"여친\"을(를) 찾으시겠습니까?"), TEXT("Brain"), MB_YESNO);

	if (i == IDNO) {
		return 0;
	}

	while (true) {
		int result = Message();

		if (result == IDRETRY) {
			continue;
		}
		else {
			break;
		}
	}


	return 0;
}

[ 코드는 GitHub에 있습니다..! ]

아 나 처맞을 거 같은데

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

MessageBox()의 데이터를 정수형 변수에 받아서 IDNO, IDYES, IDRETRY 등으로 구분이 가능합니다.

(0과 1로는 안되는 듯 합니다..)

 

< 위의 코드 중 일부입니다 >

int i = MessageBox(NULL, TEXT("\"여친\"을(를) 찾으시겠습니까?"), TEXT("Brain"), MB_YESNO);

if (i == IDNO) {
	return 0;
}

 


 

이상으로 글을 마치겠습니다! 감사합니다 :)

(댓글로 질문 및 피드백 부탁드립니다 ㅎㅎ)

 


 

2023.02.28 - [Diary/코딩 잡 지식] - 코딩 'C언어'에서 "함수" 사용법 쉽게 알려드립니다! - 함수 겉핥기

 

2023.02.28 - [Diary/하드웨어 잡 지식] - 32bit, 64bit 대체 두 개 차이가 뭐야? 쉽게 알려드립니다! - CPU의 저장장치

 

2023.01.13 - [Note/Unreal Engine] - 언리얼 엔진 자습 해보고 싶은데.. 언리얼 엔진 무료 자습 사이트 추천!

반응형