Winapi 在Windows上调整MessageBox大小时窗口布局不正确

Winapi 在Windows上调整MessageBox大小时窗口布局不正确,winapi,c++-cli,hook,messagebox,Winapi,C++ Cli,Hook,Messagebox,实际上,我必须更改Windows Win 7中标准MessageBox的按钮文本/大小。我用C++/CLI编写代码,所以显示这样一个窗口的唯一方法是执行System::Windows::Forms::MessageBox::show。。。。我可以通过将一个函数挂接到WH_CBT并激活代码HCBT_来修改该按钮 到目前为止还不错。现在我想调整窗口本身的大小以适应按钮。我得到了代码HCBT_CREATEWND,并修改了结构CBT_CREATEWND成员cx的宽度等,它可以工作 但MessageBox

实际上,我必须更改Windows Win 7中标准MessageBox的按钮文本/大小。我用C++/CLI编写代码,所以显示这样一个窗口的唯一方法是执行System::Windows::Forms::MessageBox::show。。。。我可以通过将一个函数挂接到WH_CBT并激活代码HCBT_来修改该按钮

到目前为止还不错。现在我想调整窗口本身的大小以适应按钮。我得到了代码HCBT_CREATEWND,并修改了结构CBT_CREATEWND成员cx的宽度等,它可以工作

但MessageBox按钮似乎绘制在一个横跨整个窗口宽度的灰色矩形上。此矩形不是使用Spy++的窗口,但可能是使用FillRectangle或其他等效工具绘制的。不幸的是,我的程序不允许重新绘制它。换句话说,如果我加宽MessageBox,按钮下的灰色矩形不会被重新绘制

以下是我过于简化的函数:

// Simplified code...
#define NEW_WIDTH 300
LRESULT CALLBACK CBTProc( int code, WPARAM wParam, LPARAM lParam )
{
    HWND hwnd = (HWND)wParam;
    switch ( code )
    {
        case HCBT_ACTIVATE:
            // Change buttons here
            return 0;

        case HCBT_CREATEWND:
            // Change window size here
            LPCBT_CREATEWND cw = (LPCBT_CREATEWND)lParam;
            if ( 'Main MessageBox Window, don't worry it works fine' )
            {
                cw.cx = NEW_WIDTH;
                return 0;
            }
        }
    }
    return CallNextHookEx( hook, code, wParam, lParam );
}

因此,我的问题很简单:如何使用钩子机制,在钩子函数调整大小时,强制MessageBox在按钮下正确绘制灰色矩形?

似乎创建自己的MessageBox更容易?这就是我要做的!另外,作为记录,我一直认为灰色背景看起来不错想象一下,如果微软将操作系统的外观从一个版本改为另一个版本,将会发生什么。等等,这已经发生过多次了。