您现在的位置: 软界网软界问答软件开发VC/VC.NET/MFC > 问题显示
我要提问    
提示:提问和回答别人的问题均可赢得积分
加入收藏我要投诉 我来回答
此问题已经被浏览25次,收藏:0次. 所属类别:[VC/VC.NET/MFC]
问题:窗口不能重绘。。。。。。请高手帮忙啊。。。。。?
我在做一个基于单文档的图形用户界面,我把窗口切分成两部分,一部分是CView类,另一半是CFormView类,然后我在CView的View窗口中嵌入了一个属性页。我又注册了一个新的窗口类型,设计了一个该窗口类型的窗口类CWnd:CCurveCtrl,在该类中重载了OnPaint函数,在其中进行调用了DrawGrid(CDC *pdc)和DrawCross(CDC *pdc,CRect rect)(注:这两个都是我自己写的函数)绘制坐标系和在坐标系中随着鼠标的移动显示一个十字叉并标明坐标,然后在属性页和CFormView中分别创建了一个CCurveCtrl的窗口,执行的情况是:DrawCross函数似乎没有别调用,鼠标移动的时候不会出现十字叉,没有反应,但此时改变窗口大小都是可以正常的。然后我就在CCurveCtrl:OnPaint()中加了Invalidate(),这时属性页中的窗口可以按预期的效果显示了,但CFormView中的却还是没反应,而且当改变窗口大小的时候,CFormView那半部分却不会重绘,只要把Invalidate去掉窗口重绘就没有问题,向高手请教,这是怎么回事啊?怎么可以让十字叉正常显示又可以使窗口能够正常阿?
DrawCross的代码如下:void CCurveCtrl::DrawCross(CDC *pdc)
{
CPoint point;
GetCursorPos(&point);
ScreenToClient(&point);
m_RectCoord.NormalizeRect();
if(PtInRect(m_RectCoord, point))
{
// color: using m_crAxis
CPen pentmp(PS_SOLID, 1, m_crAxis);
CPen *pOldPentmp=pdc-> SelectObject(&pentmp);

pdc-> MoveTo(point.x, m_RectCoord.top);
pdc-> LineTo(point.x, m_RectCoord.bottom);
pdc-> MoveTo(m_RectCoord.left, point.y);
pdc-> LineTo(m_RectCoord.right, point.y);

pdc-> SelectObject(pOldPentmp);
}
}
提问时间:2007-12-8 11:22:39 回答次数:(4) 提问人:软界网友 我来回答
回答(1)
关键是这句
我就在CCurveCtrl:OnPaint()中加了Invalidate()
在WM_MOUSEMOVE消息中加入 InvalidateRect()
回答人:软界网友 我来回答
回答(2)
真的非常感谢楼上的帮助,好高兴问题解决了,谢谢你:)我还有一个问题想请教,为什么在OnPaint函数中加这句话会产生这个问题呢?
回答人:软界网友 我来回答
回答(3)
不给点分给人家啊,人家解决问题了,另外,请教楼主,嵌入属性页是为了作什么
回答人:软界网友 我来回答
回答(4)
给分必须结帖吗?结了帖子就不能再有回复了?是这样吗?
嵌入属性页就是再CView中插入了一个属性页啊
回答人:软界网友 我来回答
相关问题
关键字: point,m_RectCoord,gt, pdc,DrawCross,CView,CDC,十字叉,amp,没有,显示,可以,请教,中加了Invalidate,我就在CCurveCtrl,SelectObject
我来回答
验证码