mfc如何显示对话框,mfc弹出模态对话框
在表单扩展过程中:
表单完整显示:
为了显示动画窗口,我们需要将MoveWindow函数与计时器结合起来。MoveWindow函数可以改变指定窗口的位置和大小,定时器可以在一定时间内动态改变窗口的位置和大小。MoveWindow函数的原型如下:
原型:Bool移动窗口(hwnd hwnd,int x,int y,int nwidth,int nheight,Bool b repaint);
指定窗口的句柄。
x指定CWnd左边的新位置。
指定CWnd顶部的新位置。
NWTH指定CWnd的新nWidth。
NHeight指定CWnd的新高度。
指定是否重绘CWnd。如果为TRUE,CWnd照常在OnPaint消息处理函数中接收WM_PAINT消息。如果该参数为FALSE,将不会发生任何类型的重绘操作。这适用于客户区、非客户区(包括标题栏和滚动条)以及由于CWnd移动而暴露的父窗口的任何部分。当此参数为FALSE时,应用程序必须显式地使CWnd和父窗口中必须重绘的部分无效或重绘。
move向窗口发送WM_WINDOWPOSCHANGING、WM_WINDOWPOSCHANGED、WM_MOVE、WM_SIZE和WM_NCCALCSIZE消息。
move window()void cwnd:move window的两个重载函数(int x,int y,int nwidth,int nheight,bool b repaint=true);
void CWnd:move window(LPC rect lpRect,BOOL bre paint=TRUE);
x指定CWnd左边的新位置。
指定CWnd顶部的新位置。
NWTH指定CWnd的新nWidth。
NHeight指定CWnd的新高度。
指定是否重绘CWnd。如果为TRUE,CWnd照常在OnPaint消息处理函数中接收WM_PAINT消息。如果该参数为FALSE,将不会发生任何类型的重绘操作。这适用于客户区、非客户区(包括标题栏和滚动条)以及由于CWnd移动而暴露的父窗口的任何部分。当此参数为FALSE时,应用程序必须显式地使CWnd和父窗口中必须重绘的部分无效或重绘。
lpRectCRect对象或Rect结构指定新的大小和位置。解释这个函数改变了窗口的位置和大小。对于顶层的CWnd对象,x和y参数相对于屏幕的左上角。对于子对象,它们相对于父窗口客户区的左上角。
MoveWindow函数发送WM_GETMINMAXINFO消息。在处理该消息时,CWnd有机会更改最大和最小窗口的默认值。如果传递给MoveWindow成员函数的参数超过了这些值,则可以使用最小值或最大值来替换WM_GETMINMAXINFO处理程序中的这些值。
先看这个的实现过程:
void CDHxsctDlg:on timer(UINT nIDEvent)
//TODO:在此添加您的消息处理程序代码和/或调用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());
如果(rect。Height()=m_height)
m _ dy=0;
如果((rect。Width()=m_width) (rect。Height()=m_height))
kill timer(1);
CDialog:on timer(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);
因此,实现了上述效果。