MFC 画图

如何实现移动的正弦波??voidCSy3Dlg::OnPaint(){if(IsIconic()){CPaintDCdc(this);//devicecontextfor... 如何实现移动的正弦波??

void CSy3Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);

}
else
{
CClientDC dc(this);
double y,x,radian;

dc.SetViewportOrg(0,250);
CPen pen(PS_SOLID,2, RGB(255, 0, 0));
CPen * Pdc = (CPen *)(dc.SelectObject(&pen));
// if (xx>1000) xx=0;
for( x=0;x<600;x++)
{
//弧度=X坐标/曲线宽度*角系数*π
//Y坐标=振幅*曲线宽度*sin(弧度)
radian =x/60*3.14;
y=sin(radian)*60;
dc.MoveTo((int)x,(int)y);
dc.LineTo((int)x,(int)y);
}
CDialog::OnPaint();
}
}
我的代码只能画静止的!!
展开
 我来答
躺在海滩看星星
2010-01-01 · TA获得超过1004个赞
知道小有建树答主
回答量:546
采纳率:0%
帮助的人:561万
展开全部
我也是初学,也没做过这个,大概说一下我的思路哈,但愿有用:这个应该和动画的原理是差不多的,你可以在OnPaint先建一个窗口兼容DC,然后把现在你画好的静止的正弦波的右边四分之一或八分之一部分贴到该兼容DC的最左边,然后把现在窗口中的hdc中的正弦波的左四分之三或八分之七贴到该兼容DC的最右边。设置一个定时器,在OnTimer中实现以一定频率贴兼容DC中的图并重绘窗口应该就能达到你说的移动正弦波的效果。这个方法简单但是有一个限制,就是画面可能会出现闪烁,特别是在配置低的电脑上。可以自己PeekMessage,然后响应WM_TIMER消息,比上面的方法效率要高,不会出现闪烁现象。
--
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有... 点击进入详情页
本回答由--提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式