菜鸟mm 问一个简单画图的问题

daoqituan 2011-11-19 03:47:19
还是那个 类LOGO语言的海龟问题。

乌龟是一个三角形,轨迹是 直线。

乌龟 移动了,画面重绘 ,之前的乌龟的画像 就不存在了。在新的客户区地方显示海龟。

但之前的移动轨迹 直线线段 都要显示。

怎样处理 怎样 刷新客户区?

用的 win32, 非文档 视图模式。

难道要把之前的轨迹都保存然后在一起画线段?

...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxcong 2011-12-02
  • 打赏
  • 举报
回复
最简单的做法,WndProc里,case WM_PAINT:先InvalidateRect 擦除所有画的东西,然后,再分别一个一个地Draw。直线,图都画的时候指定坐标。当然这样会闪烁,不过先解决了你的这个问题。

第二步,你申请个临时的DC,在上面画,然后再把这个DC复制到显示DC上,就是经常说的二级缓冲,这样就不闪烁了。
你先试着实现第一步。

下面是同时显示线和图示例:
#define TWOPI (2 * 3.14159)
POINT apt [1000] ;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;

MoveToEx (hdc, 0, cyClient / 2, NULL) ;
LineTo (hdc, cxClient, cyClient / 2) ;

for (i = 0 ; i < NUM ; i++)
{
apt[i].x = i * cxClient / NUM ;
apt[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM))) ;
}

Polyline (hdc, apt, NUM) ;


if (hBitmap)
{
GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;

hdcMem = CreateCompatibleDC (hdc) ;
SelectObject (hdcMem, hBitmap) ;

BitBlt (hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight,
hdcMem, 0, 0, SRCCOPY) ;

DeleteDC (hdcMem) ;
}


EndPaint (hwnd, &ps) ;
return 0 ;

}

见Charles Petzold一书
强烈建议先看看书再写代码。
Liekkas 2011-11-27
  • 打赏
  • 举报
回复
为什么要加mm?
helloangel8002 2011-11-27
  • 打赏
  • 举报
回复
应该需要重绘
faremn000 2011-11-20
  • 打赏
  • 举报
回复
是MM 吗
hacici 2011-11-19
  • 打赏
  • 举报
回复
yong directx 开发,贴图。
hurryboylqs 2011-11-19
  • 打赏
  • 举报
回复
windows程序设计 GDI部分看下
daoqituan 2011-11-19
  • 打赏
  • 举报
回复
大概要 用到 什么API?

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧