ZBLOG

void CPimageSoundPitchEditViewDlg::MovePitchPoint(int dir) { if (!m_pMain) return; CPimageSoundPitchEditDlg* pMain = (CPimageSoundPitchEditDlg*)m_pMain; for (int i = 0; i < pMain->m_pitchGraphArr.size(); i++) { PitchGraph& item = pMain->m_p...

这段代码是一个移动音高曲线点的函数,根据传入的dir参数来确定移动的方向。以下是对代码逻辑的解释:

  1. 首先判断是否存在有效的m_pMain指针,如果不存在,则返回。

  2. 将m_pMain转换为CPimageSoundPitchEditDlg类型的指针,并赋值给pMain变量。

  3. 通过循环遍历pMain->m_pitchGraphArr中存储的音高曲线数据。

  4. 如果找到了选中状态(PitchGraphStatus_selected)的音高曲线点(item),则根据dir参数进行相应操作。

  5. 如果dir等于ITEM_MOVE_UP(表示向上移动),则将item.pitch.value增加1.0。

  6. 如果dir等于ITEM_MOVE_DOWN(表示向下移动),则将item.pitch.value减少1.0。

  7. 如果dir等于ITEM_MOVE_RIGHT(表示向右移动),则获取当前音高曲线点的索引i,并计算出下一个索引next_i。

    • 如果next_i超过了数组范围,则跳过后续操作。

    • 否则,将当前音高曲线点的时间item.pitch.time与pMain->m_pitchPointTime相加,并与下一个音高曲线点的时间比较。如果小于下一个音高曲线点的时间,则更新当前音高曲线点的时间为新计算得到的时间值。

  8. 如果dir等于ITEM_MOVE_LEFT(表示向左移动),同样获取当前音高曲线点的索引i,并计算出上一个索引prev_i。

    • 如果prev_i小于0,则跳过后续操作。

    • 否则,将当前音高曲线点的时间item.pitch.time与pMain->m_pitchPointTime相减,并与上一个音高曲线点的时间比较。如果大于上一个音高曲线点的时间,则更新当前音高曲线点的时间为新计算得到的时间值。

  9. 更新音高编辑图像和刷新视图。

最后一行代码是调用Invalidate函数进行无效化重绘,以便在界面上显示最新的变化。

请注意,该段代码片段是从您提供的信息中摘录出来的,并不完整,可能存在其他相关部分。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13754

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?