C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[906] MB_YES 또는 MB_OK 를 쓰기 힘들어 하는 분들을 위해..
장성호 [nasilso] 10811 읽음    2009-07-18 01:36
ㅋㅋ
자게에 보니
요즘들어 MessageBox를 싫어하는 사람들이 많은것 같네요
VCL의 MessageDlg를 싫어 하는 사람들도 있구요

http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=15904
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=16327



이유는 잘 모르겠습니다만(???)

TMsgDlgBtn 타입의 선언을 바꿔서 쓰는 방법을 소개해드리겠습니다.


1. Win32API MessageBox의 버튼 타입 선언 바꾸기

먼저 win32api  MessageBox 에 쓰는
winuser.h에 선언되어 있죠


#define MB_OK                                     0x00000000L  
#define MB_OKCANCEL                         0x00000001L
#define MB_ABORTRETRYIGNORE        0x00000002L
#define MB_YESNOCANCEL                  0x00000003L
#define MB_YESNO                               0x00000004L
#define MB_RETRYCANCEL                   0x00000005L
#if(WINVER >= 0x0500)
#define MB_CANCELTRYCONTINUE        0x00000006L
#endif /* WINVER >= 0x0500 */



뭐 위와같이 선언되어있는데....

아래와 같이 그냥 바꾸시면 됩니다.



#define MB_RODENTS                        0x00000000L  
#define MB_MOUSE                            0x00000001L
#define MB_ABORTRETRYIGNORE      0x00000002L
#define MB_YESNOCANCEL                0x00000003L
#define MB_YESNO                            0x00000004L
#define MB_RETRYCANCEL                0x00000005L
#if(WINVER >= 0x0500)
#define MB_CANCELTRYCONTINUE    0x00000006L
#endif /* WINVER >= 0x0500 */



위와같이 고친후에 다음과 같이 사용하면 됩니다.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    MessageBox(0,"잘보이나?","테스트",MB_MOUSE);  
    MessageBox(0,"잘보이나?","테스트",MB_OK);        // 이렇게 쓰면 에러가 남
}
//---------------------------------------------------------------------------




2. VCL의 TMsgDlgBtn 선언 바꾸기

그리고 또  VCL의 MessageDlg도 마찬가지로 수정하셔 쓸수 있습니다.
Dialogs.hpp에 선언되어있는데.. 그걸 수정하시면 됩니다.

//#pragma option push -b-
//enum TMsgDlgBtn { mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp };
//#pragma option pop
//
//typedef Set  TMsgDlgButtons;

#pragma option push -b-
enum TMsgDlgBtn { mhYes, mhNo, mhOK, mhCancel, mhAbort, mhRetry, mhIgnore, mhAll, mhNoToAll, mhYesToAll, mhHelp };
#pragma option pop

typedef Set  TMsgDlgButtons;



그리고 다음과 같이 쓰면 됩니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    MessageDlg("메세지 잘 보이나요?",mtInformation,TMsgDlgButtons()<<mhYes<<mhNo,0);

   //위와같이 고친후에 이렇게쓰면 에러가 납니다.
    MessageDlg("메세지 잘 보이나요?",mtInformation,TMsgDlgButtons()<<mbYes<<mbNo,0);

}
//---------------------------------------------------------------------------


그럼...
안명호.ASURADA [asurada]   2009-07-18 11:32 X
MB_xxx 를 바꾸는 것 보다 MSG_xx 로 바꾸는 것이 사용에 혼돈을 덜 하겠네요. ^^*

+ -

관련 글 리스트
906 MB_YES 또는 MB_OK 를 쓰기 힘들어 하는 분들을 위해.. 장성호 10811 2009/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.