반응형
메인 함수까지 완료되었으니 메세지 박스 작은 부분을 하나 출력해보도록 하겠습니다.
먼저 메세지 박스에 Hello World를 출력할 테니 메세지박스를 사용해보도록 하겠습니다.
MessageBox라는 함수를 사용하기 위해서 먼저 마소님에게 재문의 해보겠습니다.
출처 - https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms645505(v=vs.85).aspx |
int WINAPI MessageBox( _In_opt_ HWND hWnd, _In_opt_ LPCTSTR lpText, _In_opt_ LPCTSTR lpCaption, _In_ UINT uType ); |
그럼 각 매개 변수를 알아보겠습니다. (역시 마소 사이트 발번역 입니다.)
매개 변수 | 의미 |
hWnd | 메세지 박스를 소유한 윈도우의 핸들값을 생성할 수 있습니다. 이 매개변수가 NULL일 경우 메세지 상자에는 오너 윈도우가 없습니다. (추가 - 발췌) - API 정복 1권 中 메세지 박스는 오너 윈도우 중앙에 나타나며, 메세지 박스가 떠 있는 동안 오너 윈도우를 사용 할 수 없게 됩니다. |
lpText | 표시할 메세지를 입력하는 곳 입니다. 문자열이 한 줄 이상으로 구성하는 경우 각 줄 사이 리턴 및 줄 바꿈 문자를 사용하여 라인을 분리할 수 있습니다. |
lpCaption | 메세지 창에 타이틀 이름을 입력하는 곳 입니다. 해당 파라미터의 값이 NULL 일 경우 타이틀에 "오류"로 표시됩니다. |
uType | 내용 및 대화 상자의 플레그 종류를 설정 할 수 있습니다. 종류는 다양하며 비트 or 연산자를 통해 플레그를 조합하여 사용할 수 있습니다. (자세한 종류는 위 링크 주소를 참고해주세요) |
그럼 사용법도 알았으니 작은 박스에 "Hello World!" 문구와 함께 확인 / 취소 버튼이 2개가 나오고 간단한
느낌표 아이콘이 출력되는 메세지 박스를 출력해보겠습니다.
시키는 대로 매개변수를 모두 넣었지만 어쩐지 뭔가 잘못 되었다는 오류를 확인 할 수 있습니다.
왜 이런걸까요? 해당 함수를 찾아가봅시다. (이런 삽질...)
해당 함수의 선언부를 보면 분명 MessageBox인데 MessgeaBoxA와 MessgeaBoxW가 있습니다.
잠시 혼란이 오겠지만 해당 부분은 유니코드를 처리하는 부분으로 사실 MassgeBox는 함수가 아닌
입력받은 문자열에 MBCS(A)와 UNICODE(W)에 따라 대응 하는 함수를 치환해주는 메크로 였던 것이었던
것이었습니다!!
비주얼 스튜디오 2010부터는 UNICODE가 기본 값으로 설정되어 있습니다.
그렇기 때문에 MassgeBoxA를 호출해야만 하는것이었습니다...(삽질)
그럼 MassgeBoxA를 사용해서 마저 함수를 고치고 출력해보겠습니다.
#include <Windows.h> int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBoxA(NULL, "Hello World!!" , "Hello World Box" , MB_OKCANCEL | MB_ICONERROR ); } |
//출력 결과 |
잘 나옵니다! 그럼 여기까지 간단한 메세지 박스였습니다.
반응형
'프로그래밍 관련 > Win API' 카테고리의 다른 글
WIndows API - #4. 윈도우창 출력 함수 자세히보기(1) (0) | 2015.08.23 |
---|---|
WIndows API - #3. 윈도우창에 Hello World 출력하기(2) (0) | 2015.08.21 |
WIndows API - #3. 윈도우창에 Hello World 출력하기(1) (4) | 2015.08.21 |
WIndows API - #2. Hello World MessageBox 출력하기(1) (0) | 2015.08.20 |
WIndows API - #1. 기본 (0) | 2015.08.20 |