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);

这样便实现了上面的效果。

时间: 2024-08-02 10:10:27

MFC中对话框窗体以动画形式显示的相关文章

MFC中对话框的数据交换(DDX)和数据校验(DDV)

MFC中对话框的数据交换(DDX)和数据校验(DDV)<reference MFC TNO 26>DDX : dialog data exchangeDDV : dialog data validation文档描述MFC中的DDX DDV机制,如何使用DDX_和DDV_ 函数和定制自己的DDX_ ,DDV_函数: Dialog Data Exchange概要:对话框的数据交换不依赖于任何宏来实现,全部依赖于C++代码实现,唯一特别之处在于每一个对话框如果想处理自己的数据交互必须重载一个虚函数v

背景图片-MFC中对话框中图片适应窗口的问题

问题描述 MFC中对话框中图片适应窗口的问题 我自己建的窗口,当从文件加载背景图片时消失在对话框中的图片太大没有显示完全?这个该如何解决呢!? 解决方案 什么意思,能说清除一点吗

MFC中如何指定位置、大小显示图片

问题描述 MFC中如何指定位置.大小显示图片 如图所示,我想在红色框框内显示人员的照片信息,规定就是按照框框那么大,请问该怎么办呢? ```void CbitMapDlg::OnBnClickedCheckButton(){ // TODO: 在此添加控件通知处理程序代码 CBitmap bitmap; HBITMAP hBmp; bitmap.LoadBitmap(IDB_BITMAP1); hBmp = (HBITMAP)bitmap.GetSafeHandle(); m_Picture.S

MFC中如何将云台控制按钮始终显示在视频流的界面上

问题描述 MFC中如何将云台控制按钮始终显示在视频流的界面上 视频显示区域用的索尼摄像机的sdk:SNC_ERROR __stdcall CreateScreen( SNC_HANDLE sncHandle, HWND ownerWindowHandle, int x, int y, int width, int height );创建的. 解决方案 拖个控件就行了,控件要放在视频插件的上层,或者是子.

mfc-MFC中对话框如何用函数实现可以调整位置?

问题描述 MFC中对话框如何用函数实现可以调整位置? 有两个对话框,都在主窗口的右下角想要的效果是两个对话框不重叠,一个在另一个的上面显示,但是我做出来都重叠了!!想问一下如何调整对话框位置并用函数实现调整?菜鸟在这谢谢了如图 解决方案 你参考一下吧. HWND hFig1 = ::FindWindow(NULL,"对话框1名称"); HWND hFig2 = ::FindWindow(NULL,"对话框2名称"); RECT Rect1; // 获取位置和大小 C

mfc-MFC中设置窗口固定后工具栏显示有问题

问题描述 MFC中设置窗口固定后工具栏显示有问题 在设置窗口不能拉伸的时候,加了 ::SetWindowLong(m_pMainWnd->m_hWnd,GWL_STYLE,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU); 窗口上工具栏就显示成图片上这样了,请问怎么办?? 解决方案 先用getwindowlong得到原来的窗口状态,再附加你要的这几个,不然的话肯定不行,比如你这个就没有客户区边缘属性了. 解决方案二: Windows MFC 两个OpenGL窗口显示与线程

mfc-MFC中对话框的设置问题

问题描述 MFC中对话框的设置问题 对话框的透明度怎么设置呢?我用了setwindowlong和setlayeredwindowattributes这两个都不行还是自己加的有误,有谁知道的话帮忙细说一下 解决方案 setlayeredwindowattributes,这个思路是对的.你可以google现成的程序来对照 http://www.cnblogs.com/cmooon/archive/2012/04/18/2455402.htmlhttp://blog.csdn.net/glt3953/

C#中如何制作以动画的形式显示窗体

一般的, 当我们启动一个应用程序后, 普通的应用程序窗口都是瞬间显示到屏幕上. 您是 否想象过这样一种情景 : 打开一个应用程序后, 窗口的显示跟幻灯片一样变幻莫测,丰富多 彩? 也许不能登大雅之堂, 但至少可以娱乐自己. 好了, 进入正题: 您现在可以想 象这样一幅画面: 当您启动一个应用程序后, 显示器中央出现一个小点, 然后慢慢变大, 向 四周不断扩展, 直到窗口全部显示. 而当您关闭它时它又会从上向下慢慢地从显示器中消 失....这将是什么效果? 呵呵, 如果您愿意, 下面就跟着我一起完

MFC单文档程序编程 最小化托盘对话框没有隐藏而是以标题栏的形式显示的呢?

问题描述 MFC单文档程序编程 最小化托盘对话框没有隐藏而是以标题栏的形式显示的呢? MFC单文档程序编程 最小化托盘某个对话框的时候 为什么对话框没有隐藏而是以标题栏的形式显示的呢 void CBeginningTimeDlg::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: Add your message handler code here and/or call default CWnd *pMainFrameWnd , *pSettin