MFC中对话框窗体以动画形式显示

简介: 先看图:  窗体扩充过程中: 窗体完全显示: 要想实现动画窗体显示,需要把MoveWindow函数和定时器结合使用,MoveWindow函数可以改变指定窗口的位置和大小,结合定时器以后可以在一定时间内动态改变窗口的位置和尺寸。
先看图:
  窗体扩充过程中:
MFC中对话框窗体以动画形式显示

窗体完全显示:
MFC中对话框窗体以动画形式显示

要想实现动画窗体显示,需要把MoveWindow函数和定时器结合使用,MoveWindow函数可以改变指定窗口的位置和大小,结合定时器以后可以在一定时间内动态改变窗口的位置和尺寸。MoveWindow函数的原型如下:
 函数原型:BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint );
  参数
   hWnd指定了窗口的句柄
  x指定了CWnd的左边的新位置。
  y指定了CWnd的顶部的新位置。
  nWidth指定了CWnd的新宽度。
  nHeight指定了CWnd的新高度。
  bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
  MoveWindow给窗口发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE消息

MoveWindow()的两个重载函数

  void CWnd::MoveWindow( int x, int y, int nWidth, int nHeight, BOOL bRepaint = TRUE );
  void CWnd::MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
  参数
  x指定了CWnd的左边的新位置。
  y指定了CWnd的顶部的新位置。
  nWidth指定了CWnd的新宽度。
  nHeight指定了CWnd的新高度。
  bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
  lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗口的位置和大小。对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。
  MoveWindow函数发送一条WM_GETMINMAXINFO消息。处理这个消息时,CWnd得到一个改变最大和最小的窗口缺省值的机会。如果传递给MoveWindow成员函数的参数超过了这些值,则在WM_GETMINMAXINFO处理函数中可以用最小或最大值来代替这些值。
先看这个的实现过程:
void CDHxsctDlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
  GetWindowRect(rect);
  GetDesktopWindow()->GetWindowRect(rc);
MoveWindow((-m_dx+rc.Width()-rect.Width())/2,
(-m_dy+rc.Height()-rect.Height())/2,
+m_dx+rect.Width(),+m_dy+rect.Height());
if(rect.Height()>=m_height)
{
m_dy=0;
}
if((rect.Width()>=m_width)&&(rect.Height()>=m_height))
{
KillTimer(1);
}
CDialog::OnTimer(nIDEvent);
}
在对话框初始化函数中:
GetWindowRect(rect);
GetDesktopWindow()->GetWindowRect(rc);
MoveWindow((rc.Width()-rect.Width())/2,(rc.Height()-rect.Height())/2,0,0);
m_width=rect.Width();
m_height=rect.Height();
m_dx=2;
m_dy=2;
SetTimer(1,10,NULL);
这样便实现了上面的效果。
目录
相关文章
MFC更改窗口/对话框的背景颜色
MFC更改窗口/对话框的背景颜色
185 0
MFC更改窗口/对话框的背景颜色
MFC修改窗口背景颜色
MFC修改窗口背景颜色
271 0
|
API 数据安全/隐私保护
VB编程:无标题栏窗体移动和自定义鼠标样式
VB编程:无标题栏窗体移动和自定义鼠标样式
241 0
|
Shell C#
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
原文:WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox 一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。
2089 0
|
C# 前端开发
WPF用ShowDialog()弹出窗体时控制该窗体的显示位置,并传值回父窗体
原文:http://blog.csdn.net/kiss0622/article/details/5852153 方法一: 1.父窗口代码 Window1.xaml.cs private void Button_Click(object sender, RoutedEventArgs e...
2827 0
|
C++
VC/MFC 在ListCtl 控件中随鼠标移动提示单元格信息
[cpp] view plaincopy   BEGIN_MESSAGE_MAP(CTipListCtrl, CListCtrl)       //{{AFX_MSG_MAP(CTipListCtrl)       ON_WM_MOUSEMOVE()       ON_WM...
1191 0
|
C++ Windows 数据可视化
VC/MFC 工具栏上动态添加组合框等控件的方法
引言  工具条作为大多数标准的Windows应用程序的一个重要组成部分,使其成为促进人机界面友好的一个重要工具。通过工具条极大方便了用户对程序的操作,但是在由Microsoft Visual C++开发环境所创建的应用程序框架中的工具条只是一个简单的按钮的集合,在功能上也仅仅是起到了菜单快捷方式的作用,而没有做到象VC、Word等软件的工具条那样,提供多种不同类型的标准控件如组合框、编辑框等。
1817 0