我想顯示一個簡單的是/否消息框,但灰色/不活動「否」按鈕。隨着C win32api顯示是/否消息框,其中否爲灰色顯示win32api C++
回答
使用SetWindowsHookEx()
或SetWinEventHook()
與線程局部鉤子捕獲MessageBox()
對話框的HWND,那麼你可以使用EnableWindow()
禁用按鈕。
下面是一個使用SetWindowsHookEx()
如何做到這一點:
HHOOK hHook = NULL;
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HCBT_ACTIVATE)
{
HWND hDlg = (HWND) wParam;
HWND hBtnWnd = GetDlgItem(hDlg, IDNO);
if (hBtnWnd != NULL)
EnableWindow(hBtnWnd, FALSE);
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
{
//...
hHook = SetWindowsHookEx(WH_CBT, &CBTProc, NULL, GetCurrentThreadId());
MessageBox(NULL, TEXT("Test"), TEXT("Test"), MB_YESNO);
if (hHook != NULL)
UnhookWindowsHookEx(hHook);
//...
}
這裏是如何做到這一點使用SetWinEventHook()
:爲什麼你要顯示的選項
void CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
if(event == EVENT_SYSTEM_DIALOGSTART)
{
HWND hBtnWnd = GetDlgItem(hwnd, IDNO);
if (hBtnWnd != NULL)
EnableWindow(hBtnWnd, FALSE);
}
}
{
//...
HRESULT hRes = CoInitialize(NULL);
HWINEVENTHOOK hHook = SetWinEventHook(EVENT_SYSTEM_DIALOGSTART, EVENT_SYSTEM_DIALOGSTART, NULL, &WinEventProc, GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_OUTOFCONTEXT);
MessageBox(NULL, TEXT("Test"), TEXT("Test"), MB_YESNO);
if (hHook != NULL)
UnhookWinEvent(hHook);
if (SUCCEEDED(hRes))
CoUninitialize();
//...
}
幸運的是,當您擁有XMessageBox時,您不必從頭開始編寫自己的消息框。 – StilesCrisis
@StilesCrisis,爲什麼添加對外部代碼的依賴關係,只需創建一個帶有兩個按鈕和一些文本的對話框就足夠簡單了? –
夠公平的。我在一個已經有XMessageBox的項目中工作,我們用它來處理所有事情,所以我猜想我的思維傾向於這個方向。這對你的工具箱來說確實是一件好事,但如果你不需要它用於任何其他目的,當然,這是過度的。 – StilesCrisis
這個問題是相當虛假。同樣,看看XMessageBox。
http://www.codeproject.com/Articles/1239/XMessageBox-A-reverse-engineered-MessageBox
- 1. C++ HMENU顯示消息框
- 2. GoogleMaps只顯示灰色框
- 3. 顯示/隱藏顯示灰色時顯示灰色的Gmap
- 4. 是否有可能將圖像顯示爲灰色?
- 5. 顯示消息框
- 6. 地圖顯示爲灰色
- 7. 檢查表中是否存在值;顯示消息框
- 8. 如何在Javascript中向用戶顯示是/否消息框?
- 9. 消息框在C#中顯示錯誤
- 10. 如何在C#asp.net窗體中顯示/顯示消息框?
- 11. 在c中顯示消息#
- 12. 單擊edittext時是否可能顯示對話框消息?
- 13. 顯示組件是否爲true,否則顯示其他組件(在React中)
- 14. (淺)灰色不顯示,未顯示
- 15. 消息框多次顯示
- 16. Android XML顏色顯示爲灰色?
- 17. BufferedImage:紅色顯示爲灰色
- 18. 爲什麼在Psychtoolbox中顯示灰度.png文件(帶有Alpha通道)時,圖像是否顯示爲紅色?
- 19. 消息框顯示得太早 - C#
- 20. C#消息框連續多次顯示
- 21. C#消息框顯示兩次
- 22. 谷歌地圖顯示灰色框
- 23. extjs消息框顯示
- 24. 顯示消息框在JavaScript
- 25. 消息框沒有顯示
- 26. 顯示阻止消息框
- 27. 顯示Django消息框架消息
- 28. Django消息框架不顯示消息?
- 29. 顯示消息
- 30. 在S60中菜單項是否可以顯示爲灰色(未刪除)?
你能解釋的是,用戶可以」點擊?如果只有一個選擇,沒有理由顯示消息框...... –
因爲它可以是滑稽的給出問題的上下文 – y2k
[This project](http://www.codeproject.com/Articles/18399/Localizing -System-MessageBox)掛鉤消息框以更改按鈕文本。你可以很容易地擴展它來禁用按鈕。 – arx