Winapi 在Windows上调整MessageBox大小时窗口布局不正确
实际上,我必须更改Windows Win 7中标准MessageBox的按钮文本/大小。我用C++/CLI编写代码,所以显示这样一个窗口的唯一方法是执行System::Windows::Forms::MessageBox::show。。。。我可以通过将一个函数挂接到WH_CBT并激活代码HCBT_来修改该按钮 到目前为止还不错。现在我想调整窗口本身的大小以适应按钮。我得到了代码HCBT_CREATEWND,并修改了结构CBT_CREATEWND成员cx的宽度等,它可以工作 但MessageBox按钮似乎绘制在一个横跨整个窗口宽度的灰色矩形上。此矩形不是使用Spy++的窗口,但可能是使用FillRectangle或其他等效工具绘制的。不幸的是,我的程序不允许重新绘制它。换句话说,如果我加宽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
// 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更容易?这就是我要做的!另外,作为记录,我一直认为灰色背景看起来不错想象一下,如果微软将操作系统的外观从一个版本改为另一个版本,将会发生什么。等等,这已经发生过多次了。