gpt4 book ai didi

c++ - 显示是/否消息框,其中“否”呈灰色 win32api C++

转载 作者:行者123 更新时间:2023-11-30 21:45:40 25 4
gpt4 key购买 nike

我想显示一个简单的是/否消息框,但“否”按钮变灰/不活动。用C win32api

最佳答案

使用SetWindowsHookEx()SetWinEventHook()使用线程本地 Hook 来捕获 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();

//...
}

关于c++ - 显示是/否消息框,其中“否”呈灰色 win32api C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16906185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com