积极答复者
如何在Win32窗口‘鼠标拖动时不进行重绘,鼠标松开时进行重绘。’

问题
-
代码例子在http://nehe.gamedev.net/data/lessons/vc/lesson02.zip可以下载到。此程序虽然是个opengl程序,但是我觉得用win32 gdi也能实现‘拖动时不进行重绘,鼠标松开时进行重绘。’效果吧。
我的疑问:我有一个主窗口,主窗口还有很多的子窗口,有的子窗口还要显示很多的动态信息。如果用鼠标左键拖动边框调整窗口的大小,那么子窗口的大小位置也要跟着改变。我觉得在wm_size里面更新子窗口的位置大小太频繁了,况且子窗口还很多,如果在鼠标松开时进行重绘,那么不是有效率多了。而且不停的移动子窗口的位置,改变子窗口的大小,整个窗口就会很闪烁。
而且www.xmission.com/~nate/index.html站点的glut 和http://freeglut.sourceforge.net/站点的freeglut就有很多不同。freeglut是随着鼠标的拖动,窗口客户区动态的调整,而glut则是在鼠标松开时才重绘制客户区。
答案
全部回复
-
在视图中响应鼠标动作.
void CxxxView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call defaultCRect rc;
ClientToScreen(&rc);
rc.left += point.x - m_xPos;
rc.top += point.y - m_yPos;
AfxGetMainWnd()->SetWindowPos(NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE);
CView::OnMouseMove(nFlags, point);
}