본문 바로가기

[+] Information/[-] Reference

[Win32 Reference] MessageBoxA() API

MessageBox

원형 int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
원형 int CWnd::MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
인수

▶hWnd : 부모 윈도우의 핸들. 메시지 박스의 이 윈도우의 모달 대화상자로 열린다. 부모 윈도우가 없을 경우 NULL로 지정할 수 있다.

▶lpText : 메시지 내용을 나타내는 널 종료 문자열. 이 문자열은 ANSI 문자열일 수도 있고 유니코드 문자열일 수도 있는데 어떤 포맷이라도 메시지 출력이 가능하다.

▶lpCaption : 메시지 박스의 타이틀 바에 나타날 문자열. NULL일 경우 디폴트로 Error(한글 윈도우즈에서는 오류)가 표시된다.

▶uType : 메시지 박스에 나타날 버튼의 종류와 아이콘 모양, 동작 방식을 지정한다. 다음 여러 그룹의 플래그 조합을 지정할 수 있다.

그룹 1 - 메시지 박스에 나타날 버튼의 종류를 지정한다.

플래그 나타나는 버튼들
MB_ABORTRETRYIGNORE
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL

그룹 2 - 메시지 박스에 나타날 아이콘을 지정한다.

플래그 아이콘
MB_ICONEXCLAMATION, MB_ICONWARNING
MB_ICONINFORMATION, MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND

그룹 3 - 디폴트 버튼을 지정한다.

플래그 디폴트 버튼
MB_DEFBUTTON1

첫번째 버튼이 디폴트 버튼이 된다. 별다른 지정이 없으면 이 플래그가 선택된다.

MB_DEFBUTTON2 두번째 버튼이 디폴트 버튼이 된다.
MB_DEFBUTTON3 세두번째 버튼이 디폴트 버튼이 된다.
MB_DEFBUTTON4 네번째 버튼이 디폴트 버튼이 된다.

그룹 4 - 대화상자의 모달 여부를 지정한다.

플래그 설명
MB_APPMODAL

hWnd 윈도우의 모달 대화상자로 열리므로 메시지 박스를 닫기 전에는 같은 스레드에 속한 다른 윈도우로 전환할 수 없다. 그러나 다른 스레드의 윈도우로 전환할 수는 있으며 팝업 윈도우로도 전환할 수 있다. 아무 플래그도 지정되지 않으면 이 모드가 디폴트로 적용된다.

MB_SYSTEMMODAL

MB_APPMODAL과 동일하되 항상 위 스타일을 가져 모든 윈도우보다 위에 배치된다. 메모리 부족 등의 긴급한 상황을 알리고자 할 때 이 플래그를 사용한다.

MB_TASKMODAL

MS_APPMODAL과 동일하되 hWnd가 NULL일 경우 현재 스레드에 속한 모든 최상위 윈도우가 사용 금지된다는 점이 다르다. DLL이나 라이브러리에서 부모 윈도우로 지정할만한 윈도우가 없을 때 이 플래그를 사용한다.

그룹 5 - 기타 몇가지 옵션을 지정한다.

플래그 설명
MB_DEFAULT_DESKTOP_ONLY 사용자가 로그온안 후 응용 프로그램이 실행되고 있는 디폴트 데스크 탑인 경우만 메시지 박스가 나타나도록 한다.
MB_HELP 도움말 버튼을 보여준다. 이 버튼을 누르거나 F1키를 누르면 Help 이벤트가 발생한다.
MB_RIGHT 메시지를 오른쪽으로 정렬한다.
MB_RTLREADING 아랍이나 헤브루 윈도우즈에서 오른쪽에서 왼쪽 읽기로 출력한다. 한글 윈도우즈에서는 의미가 없다.
MB_SETFOREGROUND 메시지 박스를 포그라운드 윈도우로 만든다. 시스템은 내부적으로 SetForegroundWindow 함수를 호출한다.
MB_TOPMOST 항상 위 옵션으로 메시지 박스를 생성한다.
MB_SERVICE_NOTIFICATION NT의 서비스 프로그램만 사용할 수 있는 플래그이다. 현재 로긴한 사용자가 없더라도 액티브되어 있는 데스크 탑에 메시지 박스를 출력한다. 이 경우 hWnd는 반드시 NULL이어야 한다.
MB_SERVICE_NOTIFICATION_NT3X MB_SERVICE_NOTIFICATION와 동일하되 NT 3.51버전에서 사용한다.
리턴

메시지 박스를 생성할 메모리가 부족할 경우 0을 리턴한다. 그 외의 경우 사용자가 누른 버튼의 ID를 리턴한다.

리턴값 버튼
IDABORT 중단 버튼을 눌렀다.
IDCANCEL 취소 버튼을 눌렀다. Esc키를 눌러 대화상자를 닫을 때도 이 값이 리턴된다.
IDIGNORE 무시 버튼을 눌렀다.
IDNO 아니오 버튼을 눌렀다.
IDOK 확인 버튼을 눌렀다.
IDRETRY 재시도 버튼을 눌렀다.
IDYES 예 버튼을 눌렀다.

 

설명

메시지 박스는 응용 프로그램이 사용자와 대화할 수 있는 가장 간단한 방법이다. 짧은 메시지와 함께 MB_OK 플래그로 간단하게 전달 사항만 전달하는 것이 보편적이다.

MessageBox(hWnd,"야! 신난다.","알림",MB_OK);

위 코드는 짧은 문자열을 보여준다. 여러 줄의 긴 메시지를 출력할 때는 다음과 같이 문자열 중간에 개행 코드를 삽입해 주면 된다.

MessageBox(hWnd,
	"동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세\r\n"
	"남산 위의 저 소나무 철갑을 두른 듯 바람서리 불변함을 우리 기상일세\r\n"
	"가을 하늘 공활한데 높고 구름없이 밝은 달은 우리 가슴 일편 단심일세\r\n"
	"이 기상과 이 맘으로 충성을 다하여 괴로우나 즐거우나 나라 사랑하세",
	"애국가",MB_OK);

다음 코드는 메시지 박스로 사용자에게 질문을 하는 예이다. 질문에 응답한 결과를 조사하여 다른 처리를 하고자 할 때도 메시지 박스를 사용할 수 있다.

if (MessageBox(hWnd,"WinApi에 자주 오십니까?","질문",MB_YESNO)==IDYES) {
	// 자주 올 때의 처리
} else {
	// 그렇지 않을 때의 처리
}

또한 메시지 박스는 디버깅 중에 제어의 흐름을 감시하거나 변수의 값을 간단하게 살펴보고자 할 때도 자주 사용된다. 원하는 변수값을 wsprintf 등의 함수로 조립한 후 화면으로 출력하면 실행중에 변수값을 확인할 수 있다.

참고함수 MessageBoxEx, MessageBeep
플렛폼 95이상
참조