MessageBox のボタンを4つ表示する

『VBA:メッセージボックスのボタンを4つにしたい』(いま) エクセル Excel [エクセルの学校]

こういう記事があって、「無理」って書いていますが

Windows のヘッダ定義をもう一度確認してみましょう

#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_ICONHAND                 0x00000010L
#define MB_ICONQUESTION             0x00000020L
#define MB_ICONEXCLAMATION          0x00000030L
#define MB_ICONASTERISK             0x00000040L

#if(WINVER >= 0x0400)
#define MB_USERICON                 0x00000080L
#define MB_ICONWARNING              MB_ICONEXCLAMATION
#define MB_ICONERROR                MB_ICONHAND
#endif /* WINVER >= 0x0400 */

#define MB_ICONINFORMATION          MB_ICONASTERISK
#define MB_ICONSTOP                 MB_ICONHAND

#define MB_DEFBUTTON1               0x00000000L
#define MB_DEFBUTTON2               0x00000100L
#define MB_DEFBUTTON3               0x00000200L
#if(WINVER >= 0x0400)
#define MB_DEFBUTTON4               0x00000300L
#endif /* WINVER >= 0x0400 */


#define MB_APPLMODAL                0x00000000L
#define MB_SYSTEMMODAL              0x00001000L
#define MB_TASKMODAL                0x00002000L
#if(WINVER >= 0x0400)
#define MB_HELP                     0x00004000L // Help Button
#endif /* WINVER >= 0x0400 */

#define MB_NOFOCUS                  0x00008000L
#define MB_SETFOREGROUND            0x00010000L
#define MB_DEFAULT_DESKTOP_ONLY     0x00020000L

#if(WINVER >= 0x0400)
#define MB_TOPMOST                  0x00040000L
#define MB_RIGHT                    0x00080000L
#define MB_RTLREADING               0x00100000L
#endif /* WINVER >= 0x0400 */

#ifdef _WIN32_WINNT
#if (_WIN32_WINNT >= 0x0400)
#define MB_SERVICE_NOTIFICATION          0x00200000L
#else
#define MB_SERVICE_NOTIFICATION          0x00040000L
#endif
#define MB_SERVICE_NOTIFICATION_NT3X     0x00040000L
#endif

We can discount the flags like MB_ICONWARNING which are just alternate
names for existing flags, as well as MB_SERVICE_NOTIFICATION which
already existed but with a different value. This leaves the following:

#define MB_USERICON                 0x00000080L
#define MB_HELP                     0x00004000L // Help Button
#define MB_TOPMOST                  0x00040000L
#define MB_RIGHT                    0x00080000L
#define MB_RTLREADING               0x00100000L

デフォルトを4番目のボタンにするというのがあります。

定義 0~6の7種類の定義しかなくてボタンは1~3個しか指定できないようになっています。

しかし、#define MB_HELP                     0x00004000L // Help Button というのを追加すると
さらにボタンを1つ追加できるようになっているのです

int res=MessageBoxA(0,"メッセージボックスのボタンを4つにする実験\nテスト",
"test",MB_ICONEXCLAMATION|MB_CANCELTRYCONTINUE |MB_HELP  |MB_DEFBUTTON4);

実際のコードです

msgbox4
ちゃんと4つボタンになりましたね。

ちなみに、MB_CANCELは右上の「x」と同じ意味なので、CANCELボタンの指定が無い
MB_ABORTRETRYIGNORE  と MB_YESNOでは「x」が押せなくなります
(なぜか MB_OK は押せます)



おすすめ

1件の返信

  1. よし より:

    質問者はExcel VBAなので出来ない可能性があると思います。
    手元にはExcel2000しかないので、機能が少ないだけなのかもしれませんが。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です