Windows でカスタム ボタン タイトルを使用してアラートを表示しますか?

StackOverflow https://stackoverflow.com/questions/1884850

  •  19-09-2019
  •  | 
  •  

質問

CoreFoundation を使用すると、次のようなアラート ダイアログを表示できます。

CFUserNotificationDisplayAlert(0.0, 
                               kCFUserNotificationPlainAlertLevel, 
                               NULL, NULL, NULL, 
                               CFSTR("Alert title"), 
                               CFSTR("Yes?), 
                               CFSTR("Affirmative"), 
                               CFSTR("Nah"), 
                               NULL, NULL);

Windows C API を使用してこれを複製するにはどうすればよいですか?私が得た最も近いものは次のとおりです。

MessageBox(NULL, "Yes?", "Alert title", MB_OKCANCEL);

しかし、これはボタンのタイトルとして「OK」と「キャンセル」をハードコードするものであり、これは私が望むものではありません。これを回避する方法、または使用できる代替関数はありますか?

役に立ちましたか?

解決

あなたはボタンの凡例を変更するためにSetWindowText関数を使用することができます。メッセージボックス()ブロック実行の流れなので、あなたはこのラウンドを取得するためにいくつかのメカニズムを必要とする - 以下のコードは、タイマーを使用しています。

私は(のFindWindowのコードがメッセージボックスには親でないに依存してもよいと思います)が、私はよく分からない。

int CustomMessageBox(HWND hwnd, const char * szText, const char * szCaption, int nButtons)
{
    SetTimer( NULL, 123, 0, TimerProc );
    return MessageBox( hwnd, szText, szCaption, nButtons );
}

VOID CALLBACK TimerProc(      
    HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
)
{
    KillTimer( hwnd, idEvent );
    HWND hwndAlert;
    hwndAlert = FindWindow( NULL, "Alert title" ); 
    HWND hwndButton;
    hwndButton = GetWindow( hwndAlert, GW_CHILD );
    do
    {
        char szBuffer[512];
        GetWindowText( hwndButton, szBuffer, sizeof szBuffer );
        if ( strcmp( szBuffer, "OK" ) == 0 )
        {
            SetWindowText( hwndButton, "Affirmative" );
        }
        else if ( strcmp( szBuffer, "Cancel" ) == 0 )
        {
            SetWindowText( hwndButton, "Hah" );
        }
    } while ( (hwndButton = GetWindow( hwndButton, GW_HWNDNEXT )) != NULL );
}

他のヒント

Windows メッセージ ボックス機能は、限られた数のスタイルのみをサポートします。提供されているものよりも複雑なものが必要な場合は、独自のダイアログ ボックスを作成する必要があります。見る メッセージボックス 可能なメッセージ ボックスの種類のリストについては、

独自のダイアログ ボックスを作成する場合は、次の内容を参照することをお勧めします。 ダイアログボックス Windowsの機能。

あなたは上記のWindows Vistaとに自分自身を結びつけるために喜んでいる場合は、

は、「<のhref =」http://msdn.microsoft.com/en-us/library/bb760540(VS.85を検討する必要があります) "のrel = "nofollowをnoreferrer"> TaskDialog の" 機能を.aspxの。私はそれはあなたがやりたいんできるようになると信じています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top