我正在寻找一种像窗口一样操作 MessageBox 的方法,我是否必须实际使用CreateWindowEx
并制作一个小窗口才能获得窗口的全部功能,包括使用诸如WM_GETTEXT
和WM_SETTEXT
或有什么方法可以发送将这些消息发送到 MessageBox?如果我绝对不能将 Windows 消息发送到 MessageBox,那么是否有比使用更简单的替代方法CreateWindowEx
来完成我正在寻找的东西?
问问题
899 次
1 回答
2
当您调用以获取其窗口句柄时,请使用线程本地WH_CBT
挂钩。MessageBox()
然后,您可以像任何其他窗口一样向它发送消息。
// if you need to customize MessageBox() across threads,
// store this variable in a TLS (thread-local storage) slot...
HHOOK hHook;
LRESULT CALLBACK MyCBTHook(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (nCode)
{
case HCBT_CREATEWND: // window is being created
case HCBT_ACTIVATE: // window is being activated
{
HWND hWnd = (HWND) wParam;
// use hWnd as needed...
break;
}
}
return CallNextHookEx(hHook);
}
int MyMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)&MyCBTHook, NULL, GetCurrentThreadId());
int iResult = MyMessageBox(hWnd, lpText, lpCaption, uType);
UnhookWindowsHookEx(hHook);
return iResult;
}
于 2013-01-28T09:13:47.263 回答