调整大小后的Win32重绘
win32 redrawing after resizing
我有下一个问题
我有基类"Shape",它包含虚函数draw(HWND)
,我有子类"Line",它包含相同的函数draw(hwnd)
。
当我在WM_MOUSEMOVE
中画线时,一切都好,但是当我最小化或改变窗口大小时,我的线消失了
我需要做什么?
我有一个指向基类指针的向量向量ff;形状* f;
case WM_LBUTTONDOWN:
{
IsDrawing = TRUE;
StartX = LOWORD(lParam);
StartY = HIWORD(lParam);
EndX = LOWORD(lParam);
EndY = HIWORD(lParam);
switch(iShape)
{
case LINE:
f=new Line();
break;
case RECTANGLE:
f=new MyRectangle();
break;
}
f->SetBrushWidth(5);
f->SetColor(RGB(255,0,0));
f->SetStartCoord(StartX,StartY);
f->SetEndCoord(EndX,EndY);
f->SetMode(1);
f->draw(hWnd);
break;
}
case WM_MOUSEMOVE:
if( IsDrawing == TRUE )
{
f->SetEndCoord(EndX,EndY);
f->SetMode(2);
f->draw(hWnd);
EndX = LOWORD(lParam);
EndY = HIWORD(lParam);
f->SetEndCoord(EndX,EndY);
f->SetMode(2);
f->draw(hWnd);
}
break;
case WM_LBUTTONUP:
EndX = LOWORD(lParam);
EndY = HIWORD(lParam);
f->SetEndCoord(EndX,EndY);
f->SetMode(3);
f->draw(hWnd);
ff.push_back(f);
IsDrawing = FALSE;
break;
画图正常,但是当改变窗口大小
你画错地方了。在接收到WM_PAINT
消息后,应该在窗口上绘图。Windows可以在任何时候重新绘制,你的程序必须能够完全重新绘制自己。
您需要将所有绘图代码移动到WM_PAINT
的处理代码中。在WM_MOUSEMOVE
处理程序中,您需要记录必须绘制的线的位置,然后调用InvalidateRect
。这将安排一个油漆周期,当油漆周期发生时,窗口可以重新粉刷。
这基本上就是Win32 101了,如果你还没有这样做,我建议你拿一本佩佐德的经典著作《Windows编程》。
相关文章:
- C++ WinAPI[GDI].自定义 gui 正确重绘
- 如何立即在paintGL()中强制Qt重绘QOpenglWidget?
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- 自定义 QGraphicItem 和重绘问题
- Win32 窗口通过顶部窗口重绘
- 在不重绘整个背景图的情况下为模型设置动画--OPENGL
- 如何刷新/重绘屏幕(不是程序窗口)
- 重绘分层窗口的正确方法
- C++ Win32 窗口背景不重绘
- 在子窗口的父窗口中重绘在 mfc 中绘制
- 在wxWidgets的简单openGL显示循环中不完整的场景重绘
- Qt重绘持久性
- 调整大小后的Win32重绘
- 使用sdl/ttf重绘文本
- glutPostRedisplay()可能只重绘某些对象
- Win32图片控制停止重绘
- 正在运行的线程中静态控件的重绘窗口
- QWidget::repaint:使用指针检测到递归重绘
- 无法在空间中重绘图像
- XLib 应用程序除非调整大小,否则不会重绘