2011-10-21 140 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不提供太多的調整,你仍然有SetWindowsHookEx在你的手中。註冊掛鉤後,您可以攔截標準的MessageBox窗口過程,並以您喜歡的方式對其進行子類化。

典型的東西還包括:

  • 改變按鈕文本
  • 增加更多的控制
  • 將定時自動關閉

掛鉤標準的窗口可以做所有這些的。

UPD。嗨,我意識到我有一些代碼與SetWindowsHookEx分享:http://alax.info/blog/127

+0

是不是將控件添加到窗口鉤子不好的消息框?因爲如果下一個Windows版本在消息框中添加了一些其他控件,或者將它們移動了,會發生什麼? – stackptr

+0

@cpp_prog:是的,在做這件事之前,你應該三思而行。另一方面,如果你想讓它自動關閉,那麼爲什麼不重複使用做得好的消息框,而不是從一開始就製作自己的消息。 –

1

做一個對話框資源(使用GUI編輯器,或通過手)並在其上調用DialogBox。沒有辦法改變MessageBox的行爲,除了它的參數支持。

這就是說,你的消息框,可以很好地使用股票選擇Yes/No。

2

您可以創建一個自己的對話框。或者,您可以使用in this article所述的窗口掛鉤。

0

在Vista中引入的task dialog功能正是你想要的,並遵循流行的系統主題。但是,如果你必須支持XP,那麼這對你來說會很不舒服。