问题:窗口不能重绘。。。。。。请高手帮忙啊。。。。。?
我在做一个基于单文档的图形用户界面,我把窗口切分成两部分,一部分是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) 提问人:
软界网友 我来回答