MFC中如何自己绘制某个窗口的边框?
响应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);
}
问题点数:30、回复次数:9Top
1 楼savages(也人)回复于 2006-03-13 09:42:36 得分 0
自己顶一下Top
2 楼savages(也人)回复于 2006-03-15 09:27:23 得分 0
再顶Top
3 楼liutaoxwl(寒桑子)回复于 2006-03-15 10:02:23 得分 9
记得当初做这个的时候响应了下面几个消息
WM_NCPAINT
WM_NCACTIVATE
WM_NCCALCSIZE
WM_SIZETop
4 楼wenkui(黒眼看红尘)回复于 2006-03-15 16:50:07 得分 2
被盖住了吧
试试比原来的rect大一点Top
5 楼liutaoxwl(寒桑子)回复于 2006-03-16 09:11:27 得分 8
大小通过WM_NCCALCSIZE算Top
6 楼xx_jj()回复于 2006-03-16 09:39:13 得分 3
在onpaint里面试试Top
7 楼savages(也人)回复于 2006-03-16 17:45:43 得分 0
搞定了.多谢大家热心帮助.其实错误还是在OnNcPaint()里面,在我的程序里面不需要响应WM_NCCALCSIZE,因为我设置了WS_BORDER属性,windows替我计算了NC区域了.
我把其中的rcWin的每个坐标都加1就可以达到我的目标了。
但是为什么需要这样还是不太明白,如果对于一个无边框的窗口,在OnPaint()函数中不需要加1也能画出矩形的。
只有在需要定制NC的位置与windows默认NC区域位置不一样的时候才需要响应WM_NCCALCSIZE消息。Top
8 楼lamputa_lito(lamputa)回复于 2006-03-16 19:09:10 得分 8
GetWindowRect(&rcWin);
ScreenToClient(&rcWin);
=================================
调用后rcWin.left 和rcWin.top都会<0,所以出错.至于为什么小于0,自己想想吧Top
9 楼savages(也人)回复于 2006-03-17 10:38:43 得分 0
明白了,多谢,当初怎么没想到呢,sighTop




