VC++ 中的 OnSize() 问题
Posted
技术标签:
【中文标题】VC++ 中的 OnSize() 问题【英文标题】:OnSize() Problem in VC++ 【发布时间】:2010-03-18 10:05:44 【问题描述】:在我的 VC++ MFC 应用程序中,我有不同的视图。在每个视图中,当我最大化它时,我将大小和位置更改为新事物(通常它会完全混合到屏幕大小)。但我不想要。所以在 OnSize() 我这样编码。
void CChildFrame::OnSize(UINT nType, int cx, int cy)
CMDIChildWnd::OnSize(nType, cx, cy);
int XBorder = GetSystemMetrics(SM_CXMAXIMIZED);
int YBorder = GetSystemMetrics(SM_CYMAXIMIZED);
switch (nType)
case SIZE_MAXIMIZED:
SetWindowPos(NULL,0,60,XBorder-45,YBorder-60,SWP_NOZORDER );
break;
但是发生了什么?当我最大化视图时,它只会最大化到上面提到的大小。但是在那个蓝色条中,没有最小化、最大化、关闭按钮。 当我双击蓝色条时,它会使用所有按钮恢复到上一个位置。 我怎样才能得到它?
【问题讨论】:
【参考方案1】:我不明白什么是“蓝条”,但您可能可以查看以下方向:修改窗口样式(参见 WS_MAXIMIZE、WS_MAXIMIZEBOX、...);覆盖 OnGetMinMaxInfo 而不是 OnSize。
【讨论】:
蓝条是带有系统菜单和标题的系统框架。我使用 OnGetMinMaxInfo()。但它只将 X,Y 位置设为 0,0。但我想要 X=0,Y=60。这是我的 OnGetMinMaxInfo() lpMMI->ptMaxTrackSize.x = XBorder-100; lpMMI->ptMaxTrackSize.y = YBorder-100;以上是关于VC++ 中的 OnSize() 问题的主要内容,如果未能解决你的问题,请参考以下文章
C++ MFC - 在 CDialog::OnSize 事件 (GetWindowRect) 上没有引发运行时错误的代码执行失败