如何将Windows消息发送到MessageBox

时间:2013-01-27 21:26:26

标签: c++ winapi

我正在寻找一种像窗口一样操作MessageBox的方法,我是否必须实际使用CreateWindowEx并创建一个小窗口以获得窗口的全部功能,包括使用诸如{之类的内容{1}}和WM_GETTEXT或者有什么方法可以将这些消息发送到MessageBox吗?如果我绝对不能将Windows消息发送到MessageBox,那么使用WM_SETTEXT来完成我正在寻找的东西是否有其他方法不那么复杂?

1 个答案:

答案 0 :(得分: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;
}