在MFC下的 brush画刷有没有方法可以画个圆,然后按一条直线运动

cena1994 2015-12-10 02:11:32
{


m_rect = CRect( 0, 210, 100, 310 );
m_bRight = TRUE;

CBrush brush( RGB( 255, 0, 255 ) );
CDC* pDC = GetDC();
pDC->FillRect( CRect( 0, 0, 100, 100 ) , &brush );


//
CRect rect( 0, 0, 100, 100 );
HDC hDC = ::GetDC( NULL );
::FillRect( hDC, &rect, brush );

SetTimer( 1, 10, NULL );

}

void CJisuanqiDlg::OnTimer(UINT nIDEvent)
{
if( 1 == nIDEvent )
{
int nStep = 1;

if( m_bRight )
m_rect.OffsetRect( nStep, 0 );
else
m_rect.OffsetRect( - nStep, 0 );

if( m_rect.right > 500 || m_rect.left < 0 )
{
m_bRight = !m_bRight;
}

//
// Invalidate();

CDC* pDC = GetDC();

// back
CRect rect( 0, 200, 600, 800 );
CBrush brushBack( RGB( 255, 255, 255 ) );
pDC->FillRect( rect, &brushBack );

//
CBrush brush( RGB( 128, 0, 128 ) );
pDC->FillRect( m_rect, &brush );

CRect rect( 0, 0, 100, 100 );
HDC hDC = ::GetDC( NULL );
::FillRect( hDC, &rect, brush );
}

CDialog::OnTimer(nIDEvent);
}


这是矩形运动的代码,
我用Ellipse画一个圆,不知道怎么运动;
CDC* pDC = GetDC();
pDC-> SelectObject(new CBrush(RGB(128,255,255)));
pDC->Ellipse(0,0,100,100);

...全文
262 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs1438250 2015-12-11
  • 打赏
  • 举报
回复
大白话就是,每秒钟把运动区图像全去掉,然后重新画一个圆。圆心沿直线方向,每秒横坐标+1。 做个双缓存就不闪烁 。。
赵4老师 2015-12-11
  • 打赏
  • 举报
回复
建议楼主放下你的代码,研究上面的“桌面小球”代码。
paschen 2015-12-11
  • 打赏
  • 举报
回复
坐标的定位是要程序员计算的
cena1994 2015-12-11
  • 打赏
  • 举报
回复
引用 10 楼 lx624909677 的回复:
如果你知道开始怎么画第一个圆的话,那运动的圆也应该知道啊,就是不停的重绘界面,然后改变画圆时候的坐标就行了
尴尬的就是,我不知道怎么设置那个定时器
cena1994 2015-12-11
  • 打赏
  • 举报
回复
void CJisuanqiDlg::OnButtonStart() { CDC * pDC = GetDC(); m_rect = CRect( 0, 210, 100, 310 ); pDC->Ellipse( &m_rect ); m_bRight = TRUE; SetTimer( 1, 10, NULL ); } void CJisuanqiDlg::OnTimer(UINT nIDEvent) { if( 1 == nIDEvent ) { int nStep = 1; if( m_bRight ) m_rect.OffsetRect( nStep, 0 ); else m_rect.OffsetRect( - nStep, 0 ); if( m_rect.right > 500 || m_rect.left < 0 ) { m_bRight = !m_bRight; } // // Invalidate(); CDC* pDC = GetDC(); // back CRect rect( 0, 200, 600, 800 ); CBrush brushBack( RGB( 255, 255, 255 ) ); pDC->FillRect( rect, &brushBack ); //pDC->Ellipse( rect ); // CBrush brush( RGB( 128, 0, 128 ) ); pDC-> SelectObject(new CBrush(RGB( 255,0,0))); //pDC->FillRect( m_rect, &brush ); pDC->Ellipse( m_rect ); } CDialog::OnTimer(nIDEvent); } 问题已解决,这是解决的方案
lx624909677 2015-12-10
  • 打赏
  • 举报
回复
如果你知道开始怎么画第一个圆的话,那运动的圆也应该知道啊,就是不停的重绘界面,然后改变画圆时候的坐标就行了
cena1994 2015-12-10
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] [quote=引用 5 楼 schlafenhamster 的回复:] “桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
下载观摩研究一下。[/quote] 竟然发现2014-10-13 14:10我下载过了!可见当时研究的不深。[/quote]
引用 8 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] [quote=引用 5 楼 schlafenhamster 的回复:] “桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
下载观摩研究一下。[/quote] 竟然发现2014-10-13 14:10我下载过了!可见当时研究的不深。[/quote] 赵老师,给我解决一下我的问题呗、我这还在水很火热之中啊~
赵4老师 2015-12-10
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
[quote=引用 5 楼 schlafenhamster 的回复:] “桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
下载观摩研究一下。[/quote] 竟然发现2014-10-13 14:10我下载过了!可见当时研究的不深。
赵4老师 2015-12-10
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
“桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
下载观摩研究一下。
cena1994 2015-12-10
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
“桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
需要第二个,但有点难以理解,我还没有搞到这种地步
schlafenhamster 2015-12-10
  • 打赏
  • 举报
回复
“桌面小球.zip” http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。”
cena1994 2015-12-10
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
是用 brush画刷,画个圆。 所以 2 者 不是 直接关系。 pDC->Ellipse 定时器中 控制 那个 rc 就 可以了。 pDC->Ellipse 以 rc 为 边界, 没有 中心问题 (圆心是 rc 的 中点)
na那请问,我这该如何实现呢?
schlafenhamster 2015-12-10
  • 打赏
  • 举报
回复
是用 brush画刷,画个圆。 所以 2 者 不是 直接关系。 pDC->Ellipse 定时器中 控制 那个 rc 就 可以了。 pDC->Ellipse 以 rc 为 边界, 没有 中心问题 (圆心是 rc 的 中点)
cena1994 2015-12-10
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
所谓运动,只是用SetTimer弄一个定时器,在OnTimer中每隔一定时间修改运动对象的基点的坐标,OnPaint中将运动的对象画在相对不同基点坐标的位置而已。
那么赵老师,这个圆的基点是什么?用我的这个方法有办法实现运动吗?
赵4老师 2015-12-10
  • 打赏
  • 举报
回复
所谓运动,只是用SetTimer弄一个定时器,在OnTimer中每隔一定时间修改运动对象的基点的坐标,OnPaint中将运动的对象画在相对不同基点坐标的位置而已。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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