OnDraw的功能本来就是全部重画,当窗口回到最前面、被遮住的部份又露了出来、窗口移动,就会调用OnDraw,在这些情况下,你无法让它只画一部份。
你可以自己让它只画某个部份,比如点击某个按钮后,把左上角那一块换成另一个样子,这时你就可以用CWnd::InvalidateRect而不要调用OnDraw,由它通知系统重画哪一部份。
另外你可以在论坛中搜索“重绘”,会找到很多这方面的解答。
你可以自己让它只画某个部份,比如点击某个按钮后,把左上角那一块换成另一个样子,这时你就可以用CWnd::InvalidateRect而不要调用OnDraw,由它通知系统重画哪一部份。
另外你可以在论坛中搜索“重绘”,会找到很多这方面的解答。
A。 WM_LBUTTONDOWN 中捕获鼠标。SetCapture()
B。 WM_LBUTTONUP 中释放捕获。::ReleaseCapture();
C。 处理 WM_MOUSEMOVE,在消息处理函数中,这样:
...GetCapture(...) //判断是否捕获了鼠标,如果没有捕获,不作处理。
CDC *pDC = pView->GetDC();
int nOldMode = pDC->SetROP2(R2_NOTXORPEN);
pDC->Draw...(...); //将原来的矩形用反相的方法重新绘制一次,以擦除原来的矩形
pDC->SetROP2(nOldMode);
pDC->Draw...(...); //绘制新的的矩形
ReleaseDC(pDC);
... //保存这个新的矩形,用于下次重绘制
可以采用CTrackRect