2011-10-21 7 views
7

カスタムメッセージボックスを作成します。私がカスタマイズしたいのは、ボタンのテキストです。Win32カスタムメッセージボックス

MessageBoxW(
    NULL, 
    L"Target folder already exists. Do you want to overwrite the folder?", 
    L"No title", 
    MB_YESNOCANCEL | MB_ICONQUESTION 
); 

私はちょうどOverwriteSkipCancelにボタンのテキストを変更したいと思います。
最も簡単な方法は何ですか?

これは、Windowsのデフォルトメッセージボックスで同じルックアンドフィールを持つようにする必要があります。

答えて

7

は、一般的な方法は、(フィールのためにあなたの要求を満たすために、見て)あなたはそれが標準のダイアログのように見えるような方法で設計する必要がGUI完全に独立したダイアログを、ダイアログリソースを作成し、持っていることです。テキストメッセージを受け入れる場合は、ウィンドウのサイズを適切に変更するコードを追加する必要があります。

まだ、先進的なものに潜っているように感じる人のための別のオプションがあります。 MessageBox APIはfintチューニングのための多くを提供していませんが、あなたの手にはまだSetWindowsHookExがあります。フックを登録したら、標準のMessageBoxウィンドウプロシージャを傍受し、好きなようにサブクラス化することができます。

代表的なものが含まれます:

  • は、標準のウィンドウをフッキング

時限自動クローズを追加する複数のコントロール

  • を追加するボタンのテキスト
  • を変更するには、それらのすべてを行うことができます。

    UPD。 Vistaで導入さhttp://alax.info/blog/127

  • +0

    ウィンドウフックのあるメッセージボックスにコントロールを追加していませんか? Windowsの次のリリースでは、メッセージボックスに他のコントロールが追加されたり、移動したりするとどうなりますか? – stackptr

    +0

    @cpp_prog:はい、これをやる前に2度考えてください。一方、自己完結したいのであれば、最初から自分で作るのではなく、よくメッセージボックスを再利用してみてはいかがですか? –

    1

    (GUIエディタで、または手作業で)ダイアログリソースを作成し、DialogBoxを呼び出します。その引数でサポートされているもの以外に、MessageBoxの動作を変更する方法はありません。

    しかし、あなたのメッセージボックスは非常によくストック/はいいいえオプションを使用することができます。

    2

    独自のダイアログを作成できます。または、in this articleのようにウィンドウフックを使用することもできます。他の人が言ったように

    0

    task dialog機能は、あなたが望むものを正確に行い、現行システムのテーマを、以下:ねえ、私はSetWindowsHookExといくつかのコードを共有する必要が実現しました。しかし、XPをサポートしなければならない場合、これはあなたにはほとんど慰めにはなりません。

    関連する問題