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

平时我们常常能够看到非常多应用程序启动过程非常酷。什么百叶窗。渐变,各种效果,今天我们看一下怎样在程序中添加这样的效果。

一、演示样例展示:

二、演示样例思路:

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

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

BOOL MoveWindow(

HWND hWnd,

int X,

int Y,

int nWidth,

int nHeight,

BOOL bRepaint

);

  • ?定时器:VisualC++自带的一个组件。能够依照一定的时间间隔周期性运行。详细的相关函数例如以下:

SetTimer()  :设置并启动定时器

KillTimer() :关闭定时器

OnTimer()   :定时器消息WM_TIMER对应函数

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

三、演示样例步骤:

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

// CDynamicStartDlg メッセージ ハンドラー

BOOL CDynamicStartDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// "バージョン情報..." メニューをシステム メニューに追加します。

	// IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->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.csdn.net/detail/chenjintaoxp/7639411

时间: 2024-10-06 00:42:53

【VC编程技巧】窗口?3.6以渐变效果加载对话框的相关文章

【VC编程技巧】窗体?3.4利用bitmap改变对话框的背景。

效果图: 代码: 1.在对话框初始化函数OnInitDialog中加载bitmap,然后创建新的画刷. // CBitmapDemoDlg メッセージ ハンドラー BOOL CBitmapDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します. // IDM_ABOUTBOX は.システム コマンドの範囲内になければなりません. ASSERT((IDM_ABOUT

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

平时我们经常可以看到很多应用程序启动过程很酷,什么百叶窗,渐变,各种效果,今天我们看一下如何在程序中增加这种效果. 一.示例展示: 二.示例思路: 1.首先介绍两个知识,一个是函数MoveWindow(),一个是定时器.  函数MoveWindow():改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来    说,位置和大小取决于父窗口客户区的左上角.函数原形如下: BOOL MoveWindow( HWND hWnd, int X, int Y, int nWi

【VC编程技巧】窗体?3.9静态窗口分割 (固定分割线)

上一章节说明了如何静态的分割窗口,分割后窗口的分割线是可以拖动的,有的时候我们需要固定分割线,那么如何实现固定分割呢? 我们需要构造出固定分割窗口类(CFixedSplitterWnd),来实现我们对窗口的固定分割,以上一章例来说明. 1.新创建MFC类,从CSplitterWnd继承,并重载WM_LBUTTONDOWN ,WM_MOUSEMOVE 和 WM_SETCURSOR消息响应函数. 2.新构造的CFixedSplitterWnd使用方法和CSplitterWnd一样. 通过MFC类向导

【VC编程技巧】窗体?3.8静态窗口分割

窗口分割在平时编成中用的特别多,Windows的资源管理器,编写代码的IDE(Visual Stdio,Eclipse)都有窗口分割,下面我们以单文档维例开始讲如何进行窗口分割! CSplitterWnd Class class CSplitterWnd : public CWnd CSplitterWnd类很方便的提供了窗口分割的功能,只需下面几步就能完成窗口分割: 定义CSplitterWnd对象在窗口框架类(CFrameWnd或者CMDIChildWnd)中: 重载框架类成员函数CFram

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要: 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen).因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM

AutoSharedLibrary -- 基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库.通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销. ASL_LIBRARY_BEGIN(TestLib) ASL_SYMBOL(Proc_test1, test1, false) ASL_SYMBOL(Proc_test2, test2, true) ASL_LIBRARY_END() TestLib theLib; try { theLib.Load("./1.so"

(转载)Win32 SDK编程系列文章——菜单(快捷菜单)——动态加载

理论 创建普通菜单步骤如下: 1)创建菜单 如:CreateMenu 2)   添加菜单项 如:AppendMenu 3)加载菜单         LoadMenu 4)设置菜单到窗口 SetMenu 5)处理菜单响应 6)消除菜单 DestroyMenu 创建右键菜单的步骤如下: 1)创建菜单 如:CreateMenu 2)   添加菜单项 如:AppendMenu 3)使用TrackPopupMenu加载菜单. 4)处理菜单响应 5)消除菜单 DestroyMenu 当然,如果你选择在已有菜

iOS开发——图形编程Swift篇&amp;CAShapeLayer实现圆形图片加载动画

CAShapeLayer实现圆形图片加载动画 几个星期之前,Michael Villar在Motion试验中创建一个非常有趣的加载动画. 下面的GIF图片展示这个加载动画,它将一个圆形进度指示器和圆形渐现动画结合.这个组合的效果有趣,独一无二和有点迷人. 这个教程将会教你如何使用Swift和Core Animatoin来重新创建这个效果.让我们开始吧! 基础 首先下载这个教程的启动项目,然后编译和运行.过一会之后,你应该看到一个简单的image显示: 这 个启动项目已经预先在恰当的位置将view