• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

【VC编程技巧】窗体?3.6以渐变效果载入对话框

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果。 一、示例展示: 二、示例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器。 函数MoveWindow():改变指定窗口的位置

平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果。

一、示例展示:







二、示例思路:


1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器。

  •  函数MoveWindow():改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来 说,位置和大小取决于父窗口客户区的左上角。函数原形如下:

BOOL MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);

  • 定时器:VisualC++自带的一个组件,可以按照一定的时间间隔周期性执行。具体的相关函数如下:

SetTimer() :设置并启动定时器
KillTimer() :关闭定时器
OnTimer() 本文来源gao($daima.com搞@代@#码8网^ :定时器消息WM_TIMER相应函数


2.主要思路是,就是在窗口启动时,设置定时器,在定时器WM_TIMER相应函数中,不断地更新窗口,直到更新到我们预期的样子。



三、示例步骤:

1.在窗口初始化函数OnInitDialog()中,初始化窗口状态,设置定时器。

// CDynamicStartDlg メッセージ ハンドラーBOOL CDynamicStartDlg::OnInitDialog(){	CDialogEx::OnInitDialog();	// "バージョン情報..." メニューをシステム メニューに追加します。	// IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);	ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);		}	}	// このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、	//  Framework は、この設定を自動的に行います。	SetIcon(m_hIcon, TRUE);			// 大きいアイコンの設定	SetIcon(m_hIcon, FALSE);		// 小さいアイコンの設定	// TODO: 初期化をここに追加します。		//获取对话框窗口的大小	this->GetWindowRect(&m_dlgRect);	//获取桌面窗口的大小	CWnd*  pDestopWnd = GetDesktopWindow();	pDestopWnd->GetWindowRect(&m_destopRect);	//初始化对话框的位置和大小(位置:桌面中心,大小:0)	MoveWindow(		(m_destopRect.Width()-m_dlgRect.Width())/2, 		(m_destopRect.Height()-m_dlgRect.Height())/2,		0,		0);	//设置定时器,并启动(5s)	this->SetTimer(1, 5, NULL);	return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。}

2.添加WM_TIMER的相应函数OnTimer(),在OnTimer()中更新窗口的状态,达到预期的样子时,就关闭定时器。

void CDynamicStartDlg::OnTimer(UINT_PTR nIDEvent){	// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。	CRect dlgRect;         //保存对话框窗口当前大小	static int offsetX = 2;//更新对话框窗口状态时的X增量	static int offsetY = 2;//更新对话框窗口状态时的Y增量	switch (nIDEvent)	{	case 1:		//获取对话框窗口当前的大小		this->GetWindowRect(&dlgRect);		//更新对话框的位置和大小(利用:offsetX,offsetY)		MoveWindow(		(-offsetX + m_destopRect.Width() - dlgRect.Width())/2, 		(-offsetY + m_destopRect.Height() - dlgRect.Height())/2,		dlgRect.Width() + offsetX,		dlgRect.Height() + offsetY);		//X方向达到对话框窗口预期值,停止增加		if (dlgRect.Width() >= m_dlgRect.Width())   offsetX = 0;		//Y方向达到对话框窗口预期值,停止增加		if (dlgRect.Height() >= m_dlgRect.Height()) offsetY = 0;		//X,Y都达到对话框窗口预期值,关闭定时器		if (dlgRect.Width() >= m_dlgRect.Width() && dlgRect.Height() >= m_dlgRect.Height())		{			this->KillTimer(nIDEvent);		}	default:		break;	}	CDialogEx::OnTimer(nIDEvent);}

P.S提供文章示例代码:http://download.gaodaima.com/detail/chenjintaoxp/7639411


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【VC编程技巧】窗体?3.6以渐变效果载入对话框

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址