gpt4 book ai didi

winapi - 摆脱 MDI 框架窗口的 3D 外观

转载 作者:行者123 更新时间:2023-12-02 09:28:28 25 4
gpt4 key购买 nike

我有一个 MFC MDI 应用程序,我想摆脱(现在有些过时的)3d 外观。

原始 3D 外观:

enter image description here

我想要的外观:

enter image description here

我已经通过重载 CMDIFrameWnd::CreateClient 成功做到了这一点我的 CMDIFrameWnd 派生类的虚拟方法并替换 dwExStyle = WS_EX_CLIENTEDGE;dwExStyle = 0;在某个时刻。

这是可行的,但是每次文档窗口从最大化状态转变为平铺状态以及其他一些情况时,CMDIChildWnd::UpdateClientEdge调用函数并且该函数将样式修改回 WS_EX_CLIENTEDGE从而恢复到 3d 矩形。不幸的是UpdateClientEdge方法不是虚拟的,因此如果我重载它,原来的CMDIChildWnd::UpdateClientEdge被调用而不是我的重载 CMyMDICHildWnd::UpdateClientEdge .

两者CMDIChildWnd::UpdateClientEdngCMDIChildWnd::CreateClient函数位于 winmdi.cpp 中。

所以我被困在这里了。有人知道如何实现这一点吗?

最佳答案

UpdateClientEdge 包含以下代码:

BOOL bIsTabbedMDIChild = pChild != NULL && pChild->IsTabbedMDIChild();
if ((pChild == NULL || pChild == this) && !bIsTabbedMDIChild)
{
//change the border
}

IsTabbedMDIChild 是虚拟的,因此您可以为 IsTabbedMDIChild 返回 TRUE 来欺骗 UpdateClientEdge 并阻止其进行更改。

BOOL CMyMDIChildWnd::IsTabbedMDIChild() { return TRUE; }

(据我所知 IsTabbedMDIChild 没有在其他地方使用)

关于winapi - 摆脱 MDI 框架窗口的 3D 外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35553955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com