高分求助:去掉框架内视图窗口的3D边框属性WS_EX_CLIENTEDGE

dianhui 2010-11-05 09:51:23
我写了一个单文档框架测试程序,并且将框架内视图进行了分割,分成一行两列。现在要求将框架内视图的3D边框去掉,我试过很多办法,都没有成功,现在高分求助各位,希望帮忙解决。
测试程序已经放入到我的邮箱:publicdata@163.com 密码:123456d。测试程序放在草稿箱及网盘里都有,请高人帮忙改改,并上传到邮箱,署名,以便将分值给你。
该问题参考贴:http://topic.csdn.net/t/20030910/14/2244416.html
...全文
1171 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
云朵0101 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dianhui 的回复:]
引用 20 楼 schlafenhamster 的回复:

用SPY++看,确实还有一个小缝,(MDI...),看来:if(splitBorder==nType) return;不画是不行了。
你的办法可行。


有没有SPY++使用方法教程,前面有朋友说用SPY++能看出窗口的风格,你竟然还可以用SPY++看到没有被绘制的地方,我却不会用SPY++。惭愧啊,希望能指导一下或是提供SP……
[/Quote]dianhui现在你的这个问题解决了吗?怎么解决的?
云朵0101 2011-12-31
  • 打赏
  • 举报
回复
jacky_qiu的方法不能用,abc881858你怎么能随便说呢
A429187335 2011-09-07
  • 打赏
  • 举报
回复
豆腐干
abc881858 2011-02-17
  • 打赏
  • 举报
回复
jacky_qiu的方法很管用啊 我试过了 行的
schlafenhamster 2010-11-07
  • 打赏
  • 举报
回复
//仅参考:
void CMySplitterWnd::OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect )
{
if(splitBorder==nType)
{
if(pDC)
{
afxDump << "haha\n";
CRect rc=rect;// because "const" rect !
CBrush brush(GetSysColor(COLOR_WINDOW));
pDC->FrameRect(rc,&brush);
rc.DeflateRect(1,1);
pDC->FrameRect(rc,&brush);
/* CSplitterWnd is:
case splitBorder:
ASSERT(afxData.bWin4);
pDC->Draw3dRect(rect, afxData.clrBtnShadow, afxData.clrBtnHilite);
rect.InflateRect(-CX_BORDER, -CY_BORDER);//-1,-1
pDC->Draw3dRect(rect, afxData.clrWindowFrame, afxData.clrBtnFace);
return;
*/
return;
}
}
CSplitterWnd::OnDrawSplitter(pDC, nType, rect);
}
//效果是不好
看不见的裂痕 2010-11-07
  • 打赏
  • 举报
回复
当初偶不小心就搞出楼主需求的效果。实在太恶心。。。楼主竟然需求这么丑的效果。
schlafenhamster 2010-11-07
  • 打赏
  • 举报
回复
SPY++使用方法网上有,我用的是“find window”,按住鼠标,拖到你要知道的窗口就行了,不难的。
向立天 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dianhui 的回复:]

引用 20 楼 schlafenhamster 的回复:

用SPY++看,确实还有一个小缝,(MDI...),看来:if(splitBorder==nType) return;不画是不行了。
你的办法可行。


有没有SPY++使用方法教程,前面有朋友说用SPY++能看出窗口的风格,你竟然还可以用SPY++看到没有被绘制的地方,我却不会用SPY++。惭愧啊,希望能指导一下或是提供S……
[/Quote]看帮助就可以了
schlafenhamster 2010-11-07
  • 打赏
  • 举报
回复
那个缝我给你搞掉了。思路是想法置m_cxBorder=0

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
// create splitter window
if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE;
// access the protected variable
CSplitterWnd *pSplit=(CSplitterWnd *)&m_wndSplitter;//派生类无 data!
__asm
{
push eax
push ebx
xor eax,eax
mov ebx,pSplit
mov [ebx]pSplit.m_cxBorder,eax
mov [ebx]pSplit.m_cyBorder,eax
pop ebx
pop eax
}


派生类没变:
// CMySplitterWnd message handlers
void CMySplitterWnd::OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect )
{
if(splitBorder==nType)
{
return;
}
CSplitterWnd::OnDrawSplitter(pDC, nType, rect);
}
jacky_qiu 2010-11-06
  • 打赏
  • 举报
回复
来自:http://hi.baidu.com/%D5%D0%B7%E2/blog/item/bf08aa293cd13e21d52af1ed.html

VC++6.0 如何去掉MFC向导生成的SDI程序中视图边框的3D效果2010-03-24 17:48先要去掉view的边框,代码如下:
BOOL CSDIView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

cs.style &=~WS_BORDER;//加入的代码

return CFormView::PreCreateWindow(cs);
}
然后在去掉外部Frame的客户区边框,代码如下:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

cs.dwExStyle&=~WS_EX_CLIENTEDGE;//加入的代码,一定要在CFrameWnd::PreCreateWindow(cs)之后执行

return TRUE;


dianhui 2010-11-06
  • 打赏
  • 举报
回复
下面是在单视图下我做的效果图,但是我想在测试程序中的视图分割程序中却无法实现。
dianhui 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 schlafenhamster 的回复:]

用SPY++看,确实还有一个小缝,(MDI...),看来:if(splitBorder==nType) return;不画是不行了。
你的办法可行。
[/Quote]

有没有SPY++使用方法教程,前面有朋友说用SPY++能看出窗口的风格,你竟然还可以用SPY++看到没有被绘制的地方,我却不会用SPY++。惭愧啊,希望能指导一下或是提供SPY++学习的资料。谢谢!
schlafenhamster 2010-11-06
  • 打赏
  • 举报
回复
用SPY++看,确实还有一个小缝,(MDI...),看来:if(splitBorder==nType) return;不画是不行了。
你的办法可行。
dianhui 2010-11-06
  • 打赏
  • 举报
回复
没有太好的办法,最后只有将分割窗体边框的颜色设置与框架边框颜色一致,以去掉其3D边框效果。
dianhui 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 schlafenhamster 的回复:]

"分割条绘制又有些问题".
我试的时候,发现分割条颜色变浅了,可能是它的背景不见了,但功能是对的。
那就要在“splitBar”时想法了。
[/Quote]
是的,之前我一直认为是对视图风格设置有问题,但是无论我如果将视图设置不带3D边框风格,框架内视图还是有3D边框效果。之前我也用无视图分割窗口作过测试,用我的方法是可以去掉3D边框风格的,所以我也怀疑过是分割窗口造成这个原因,但是没有去做测试,刚刚用你的建议试了一下,果真是分割窗口的原因,现在正在改正。谢谢指导,改完后便结贴给分。
schlafenhamster 2010-11-06
  • 打赏
  • 举报
回复
"分割条绘制又有些问题".
我试的时候,发现分割条颜色变浅了,可能是它的背景不见了,但功能是对的。
那就要在“splitBar”时想法了。
dianhui 2010-11-06
  • 打赏
  • 举报
回复
感谢schlafenhamster,虽然你的方法还不能让我解决问题。但是至少让我明白框架内视图出现3D边框的原因已经不是由视图本身风格设置造成的。从你这个方法可以看出,应该是由分割窗口体的原因。
但是如果按你这样做,分割条绘制又有些问题。
schlafenhamster 2010-11-06
  • 打赏
  • 举报
回复
//我是试过的,你呢?
if(splitBorder==nType) return;
dianhui 2010-11-06
  • 打赏
  • 举报
回复
坐等高人。
libinfei8848 2010-11-06
  • 打赏
  • 举报
回复
更简单的办法不修改代码,直接去资源文件中找到属性设置
加载更多回复(10)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧