现在想做出一个对话框上有5个按钮。如果我按左右键,会出现按钮一个移动的过程。。
如果用movewindow感觉不到移动的那种效果,就像IPHONE和安卓一样的滑动的效果。
现在没一点思路,高手指教。谢谢。
如果用movewindow感觉不到移动的那种效果,就像IPHONE和安卓一样的滑动的效果。
现在没一点思路,高手指教。谢谢。
解决方案 »
- 服务端如何访问客服端上某个文件内容?
- 谁用VC做过计算机与GPIB仪器通讯的?小弟愿出500人民币请教
- 怎么把一个对象的值赋值给另一个对象?
- 新人请教应用程序远程访问数据库的问题
- mfc向导创建的应用程序从哪一条语句开始执行?程序能从开始启动就单步调试吗?
- 在Windows XP下如何为VC++.NET的应用程序进行打包发布,使得在非.NET平台下(如win98、winME、win2000等)也能使用??
- 用VC做的可换肤的漂亮对话框,大家来看看,给点改进意见
- 大文件的传输用 socket api 怎么实现
- 关于HP-SOCKET的几点疑问。请用过的大侠赐教。
- 我想上“天津大学网络教育学院”学计算机应用与科学技术,就是利用网络远程教育。毕业后找工作算重点大学毕业吗?
- 请教模式对话框消息获取问题!
- 如何学好C++
如果要看到滑动效果的话就要把它在滑动过程中的位置也显示出来,就是好多次movewindow一步一步移动到想去的位置,速度快了看着就是滑过去的了
我做过滑动菜单,就像迅雷7右键菜单那样的,不过迅雷7现在改没了,迅雷看看4还有这个特效。
我的经验一次移动5个像素以内就可以,timer设到最小才可以,大概20ms把。关键是自己设计一下匀加速、匀减速运动,物理没学好的补一下。
这个是每次一个FOR循环,5个像素点。然后用定时器是吗?
你看看这个例子能不能给你些启示
http://download.csdn.net/detail/xianglitian/210083
{
sleep(200);
movewindow();
}
{
rc1.left += 8;
rc2.left += 8;
rc3.left += 8;
rc1.right += 8;
rc2.right +=8;
rc3.right += 8;
m_bt1.MoveWindow(rc1);
m_bt2.MoveWindow(rc2);
m_bt3.MoveWindow(rc3);
// m_bt1.Invalidate();
// m_bt2.Invalidate();
// m_bt3.Invalidate();
RedrawWindow(); m_iCount++;
if(m_iCount>20)
{
KillTimer(0);
}
}
CDialog::OnTimer(nIDEvent);我现在是这么做的。感觉出来点效果了。问题是会有点闪烁。
各位朋友,指教下!
{
return TRUE;
// return CWnd::OnEraseBkgnd(pDC); // 注释掉默认语句
}
试一试
{
rc1.left += 8;
rc2.left += 8;
rc3.left += 8;
rc1.right += 8;
rc2.right +=8;
rc3.right += 8;
m_bt1.MoveWindow(rc1);
m_bt2.MoveWindow(rc2);
m_bt3.MoveWindow(rc3);
// m_bt1.Invalidate();
// m_bt2.Invalidate();
// m_bt3.Invalidate();
// RedrawWindow();//去掉这句
InvalidateRect(rc1);//加上这句,如果刷新区域过小,就再适当增大点
m_iCount++;
if(m_iCount>20)
{
KillTimer(0);
}
}
CDialog::OnTimer(nIDEvent);
{
LINEAR, // Linear.
EASE_OUT, // Fast in, slow out (default).
EASE_IN, // Slow in, fast out.
EASE_IN_OUT, // Slow in and out, fast in the middle.
FAST_IN_OUT, // Fast in and out, slow in the middle.
EASE_OUT_SNAP, // Fast in, slow out, snap to final value.
ZERO, // Returns a value of 0 always.
};// static
double Tween::CalculateValue(Tween::Type type, double state)
{
ASSERT(state >= 0 && state <= 1); switch(type)
{
case EASE_IN:
return pow(state, 2); case EASE_IN_OUT:
if(state < 0.5)
{
return pow(state * 2, 2) / 2.0;
}
return 1.0 - (pow((state - 1.0) * 2, 2) / 2.0); case FAST_IN_OUT:
return (pow(state - 0.5, 3) + 0.125) / 0.25; case LINEAR:
return state; case EASE_OUT_SNAP:
state = 0.95 * (1.0 - pow(1.0 - state, 2));
return state; case EASE_OUT:
return 1.0 - pow(1.0 - state, 2); case ZERO:
return 0;
} ASSERT(FALSE);
return state;
}// static
double Tween::ValueBetween(double value, double start, double target)
{
return start + (target - start) * value;
}// static
int Tween::ValueBetween(double value, int start, int target)
{
if(start == target)
{
return start;
}
double delta = static_cast<double>(target - start);
if(delta < 0)
{
delta--;
}
else
{
delta++;
}
return start + static_cast<int>(value * _nextafter(delta, 0));
}