CPropertySheet去除边框失败:调用ModifyStyle相关方法无效应如何解决?
移除CPropertySheet 3D边框的实现方案
你之前的代码未生效,是因为仅修改了CPropertySheet外层窗口的样式,未处理内部Tab控件、属性页自带的边框样式,同时缺少触发样式重绘的参数。可按以下步骤操作:
1. 修改CPropertySheet外层窗口样式
在CPropertySheet子类的OnInitDialog函数中添加如下代码,除移除已配置的样式外,还要额外移除常规边框、可调边框、客户端边缘等样式,同时传入SWP_FRAMECHANGED触发非客户区重绘:
ModifyStyle(WS_CAPTION | WS_BORDER | WS_THICKFRAME, 0, SWP_FRAMECHANGED); ModifyStyleEx(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE, 0, SWP_FRAMECHANGED);
2. 处理内部Tab控件的边框
CPropertySheet内置的Tab控件默认自带边框,需要同步修改其样式:
CTabCtrl* pTab = GetTabControl(); if (pTab != nullptr) { // 移除Tab控件边框 pTab->ModifyStyle(TCS_BORDER, 0, SWP_FRAMECHANGED); // 如果不需要展示Tab标签,可额外添加下面这句隐藏Tab控件 // pTab->ShowWindow(SW_HIDE); }
3. 移除属性页自身的边框
每个嵌入的CPropertyPage也默认带有3D边框,需要在每个属性页子类的OnInitDialog函数中添加样式修改代码:
ModifyStyle(WS_BORDER, 0, SWP_FRAMECHANGED); ModifyStyleEx(WS_EX_CLIENTEDGE | WS_EX_STATICEDGE, 0, SWP_FRAMECHANGED);
额外补充
如果调整完上述样式后仍有残留边框,可以重载CPropertySheet的OnNcPaint函数,自定义绘制非客户区,将边框区域填充为和窗口背景一致的颜色即可彻底消除边框。
内容的提问来源于stack exchange,提问作者Miyutic
相关产品推荐
相关产品推荐

