我发现它展示了如何借鉴的东西MSDN上的例子in pure win32.
你不应该叫失效或Updatewindow在WM_PAINT,作为UpdateWindow发送一个新的WM_PAINT事件,和无效得到积累,直到下一个 WM_PAINT事件。
您应该将代码分成两个函数,一个用于执行移动,另一个用于在当前位置绘制圆。
你的动机 - 函数可以从任何地方(或许在定时器处理函数?)被调用,并应与
InvalidateRect (hWnd, NULL, TRUE);
UpdateWindow(hWnd);
末端,以纪念为redrawal您的客户区,并通知你的窗口重绘自身。
Your Draw() - 函数应该读取使用移动器功能设置的位置,并且只需在此位置绘制一个圆。
(旁注:如果你希望尽量减少闪烁并获得流畅的动画,看看双缓冲一旦你得到了基本的动画和跑步)
UPDATE
你失踪更新函数中的UpdateWindow命令 只有当您的应用程序收到WM_PAINT消息时才会调用您的OnPaint函数,因此您需要发送这些消息。
UpdateWindow用于这个目的
VOID update(HDC hdc,HWND hWnd)
{
sf++;
FillRect(hdc,rect,(HBRUSH)(COLOR_WINDOW+1));
InvalidateRect (hWnd, NULL, TRUE);
UpdateWindow(hWND);//<- This Line sends a wm_paint-message to your window in order to make it redraw itself
}
//i didn't do any changes to the onPaint functon but here is the code for it
VOID onPaint(HDC hdc)
{
Graphics graphics(hdc);
Pen pen(Color(255, 0, 0, 255));
graphics.DrawEllipse(&pen, sf , 0, 10, 10);
}
//here is the while loop
while(sd==1)
{ onPaint(hdc);
update(hdc,hWnd);
}
嗯..它画一个圆,那就是它 你可以在这里看到完整的代码 http://pastesite.com/18049 – Ramilol 2010-08-10 08:10:54
@Ramiz你应该在WM_CREATE消息,在WndProc上调用OnCreate: - 编辑:对不起忽略评论,我没有注意到你打电话给OnCreate。 – Tassos 2010-08-10 08:48:14
现在好吧,它创建一个x = 1的圆,比创建x = 2的圆............它永远不会删除旧的圆 – Ramilol 2010-08-10 09:30:30