MFC中如何自己绘制某个窗口的边框?

savages 2006-03-12 05:37:37
响应WM_NCPAINT消息发现一点作用都没有,下面是我的代码,百思不得其解,错在哪里?
望高手们赐教,谢谢
void CMyWindow::OnNcPaint()
{
// TODO: Add your message handler code here
// Do not call CWnd::OnNcPaint() for painting messages
CWindowDC dc(this);
CRect rcWin;
CPen pen, *pOldPen;
CBrush *pOldBrush;

GetWindowRect(&rcWin);
ScreenToClient(&rcWin);
pen.CreatePen(PS_SOLID, 1, CR_BORDER_MINE);
pOldPen = dc.SelectObject(&pen);
pOldBrush = (CBrush *)dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(&rcWin);
dc.SelectObject(pOldPen);
dc.SelectObject(pOldBrush);

}
...全文
666 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
savages 2006-03-17
  • 打赏
  • 举报
回复
明白了,多谢,当初怎么没想到呢,sigh
xx_jj 2006-03-16
  • 打赏
  • 举报
回复
在onpaint里面试试
liutaoxwl 2006-03-16
  • 打赏
  • 举报
回复
大小通过WM_NCCALCSIZE算
lamputa_lito 2006-03-16
  • 打赏
  • 举报
回复
GetWindowRect(&rcWin);
ScreenToClient(&rcWin);
=================================
调用后rcWin.left 和rcWin.top都会<0,所以出错.至于为什么小于0,自己想想吧
savages 2006-03-16
  • 打赏
  • 举报
回复
搞定了.多谢大家热心帮助.其实错误还是在OnNcPaint()里面,在我的程序里面不需要响应WM_NCCALCSIZE,因为我设置了WS_BORDER属性,windows替我计算了NC区域了.

我把其中的rcWin的每个坐标都加1就可以达到我的目标了。
但是为什么需要这样还是不太明白,如果对于一个无边框的窗口,在OnPaint()函数中不需要加1也能画出矩形的。

只有在需要定制NC的位置与windows默认NC区域位置不一样的时候才需要响应WM_NCCALCSIZE消息。
liutaoxwl 2006-03-15
  • 打赏
  • 举报
回复
记得当初做这个的时候响应了下面几个消息
WM_NCPAINT
WM_NCACTIVATE
WM_NCCALCSIZE
WM_SIZE
savages 2006-03-15
  • 打赏
  • 举报
回复
再顶
wenkui 2006-03-15
  • 打赏
  • 举报
回复
被盖住了吧
试试比原来的rect大一点
savages 2006-03-13
  • 打赏
  • 举报
回复
自己顶一下

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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