Winapi can';t在win32中更改属性页中状态栏控件的高度

Winapi can';t在win32中更改属性页中状态栏控件的高度,winapi,visual-c++,mfc,Winapi,Visual C++,Mfc,我有一个windows应用程序,试图在PropertyPage的底部创建一个状态栏。我在派生的propertypage类中添加了一个名为m_StatBar的CStatusBarCtrl类型的成员变量 以下是PropertyPage的OnInit对话框中的代码 enter code here int nTotWide; // total width of status bar CRect rect3; this->GetWindowRect(&rect3); rect3.

我有一个windows应用程序,试图在PropertyPage的底部创建一个状态栏。我在派生的propertypage类中添加了一个名为m_StatBar的CStatusBarCtrl类型的成员变量

以下是PropertyPage的OnInit对话框中的代码

enter code here
int nTotWide;       // total width of status bar
CRect rect3;
this->GetWindowRect(&rect3);
rect3.top = rect3.bottom - 70;

int m_bRvStatOk = m_StatBar.Create(WS_CHILD | WS_BORDER | WS_VISIBLE, rect3, this,IDC_STATUSBAR);
if (m_bRvStatOk == NULL)

{
    AfxMessageBox("Status Bar not created!", NULL, MB_OK);
}
//  get size of window, use to configure the status
//  bar with four separate parts

nTotWide = rect3.right - rect3.left;
//
// Make each part 1/4 of the total width of the window.
//
m_Widths[0] = nTotWide / 4;

m_Widths[1] = nTotWide / 2;

m_Widths[2] = nTotWide - m_Widths[0];

m_Widths[3] = -1;

m_StatBar.SetMinHeight(70);
m_StatBar.SetParts(4, m_Widths);
m_StatBar.SetText("TEXT WITH BORDER.", 0, 0);
m_StatBar.SetText("TEXT WITHOUT BORDER.", 1, SBT_NOBORDERS);
m_StatBar.SetText("TEXT POPUP.", 2, SBT_POPOUT);
我无法更改状态栏的高度。
感谢您在这方面的帮助。

您不能设置高度。但是,您可以通过向控件发送消息来请求最小大小(实现就是这样做的)

不过,这还不足以让系统拾取请求的最小高度。虽然MFC文档没有提供任何帮助或提示,但文档中有以下注释:

应用程序必须将消息发送到状态窗口以重新绘制窗口。
WM_SIZE
消息的wParam和lParam参数应设置为零

这转化为以下MFC实现:

m_StatBar.SetMinHeight(70);
m_StatBar.SendMessage(WM_大小);//wParam和lParam的默认参数设置为0

我看不出您在哪里尝试设置高度(除了设置最小高度,这只会阻止它被调整到最小值以下,而您不会尝试这样做)。您只需设置状态栏中4个面板的宽度。通常,MFC不会告诉您全部情况。实现只是发送一条消息。现在,该文档还告诉您:“应用程序必须将
WM_SIZE
消息发送到状态窗口以重新绘制窗口。
wParam
lParam
消息的
WM_SIZE
参数应设置为零。”谢谢@iinspectable当WM_SIZE消息以wParam=0和lParama=0发送时,它可以工作。然后我会发布一个答案,只需要确认您使用的是MFC(而不是其他库,如WTL)。