我有一个 MFC MDI 应用程序,我想摆脱(现在有些过时的)3d 外观。
原始 3D 外观:
我想要的外观:
CMDIFrameWnd::CreateClient我已经通过重载CMDIFrameWnd 派生类的虚拟方法并在某个时候替换dwExStyle = WS_EX_CLIENTEDGE;为来设法做到这一点dwExStyle = 0;。
这是可行的,但每次文档窗口从最大化状态转变为平铺状态以及其他一些情况时,CMDIChildWnd::UpdateClientEdge都会调用该函数,并且该函数会将样式修改回,WS_EX_CLIENTEDGE从而恢复为 3d 矩形。不幸的是,该UpdateClientEdge方法不是虚拟的,因此如果我重载它,CMDIChildWnd::UpdateClientEdge则会调用原始方法而不是我的重载方法CMyMDICHildWnd::UpdateClientEdge。
CMDIChildWnd::UpdateClientEdng和函数都CMDIChildWnd::CreateClient位于 winmdi.cpp 中。
所以我被困在这里了。有人知道如何实现这一点吗?
UpdateClientEdge包含以下代码:
BOOL bIsTabbedMDIChild = pChild != NULL && pChild->IsTabbedMDIChild();
if ((pChild == NULL || pChild == this) && !bIsTabbedMDIChild)
{
//change the border
}
Run Code Online (Sandbox Code Playgroud)
IsTabbedMDIChild是虚拟的,所以你回来TRUE愚弄并阻止它做出改变。IsTabbedMDIChildUpdateClientEdge
BOOL CMyMDIChildWnd::IsTabbedMDIChild() { return TRUE; }
Run Code Online (Sandbox Code Playgroud)
(据我所知IsTabbedMDIChild没有在其他地方使用过)