当前位置: 首页 > 图文教程 > 开发语言 > VC++ > XP风格复活节彩蛋的实现

VC++
透明窗体的又一实现
橡皮区矩形 CRectTracker C# 实现
Visual Basic .NET 中多 Windows 窗体的同步
轻松实现类 MSDN 2002 界面(二)
轻松实现类 MSDN 2002 界面
数据库开发之窗体编程
一个打印报表的简单的类
SDK 程序使用SkinMagic工具包换皮肤
Windows SDK笔记(七):创建MDI窗口
Windows SDK笔记(六):使用对话框资源建立窗口
Windows SDK笔记(五):非模式对话框
Windows SDK笔记(四):模式对话框
也谈如何隐藏显示在任务栏中的对话框程序
一个托盘程序演示 -闹钟 Alert
think window procedure
再谈 CFileDialog 对话框的定制
获得 Win32 窗口句柄的更好的方法
个人考勤软件开发实例配套代码 2.1版(Update)
介绍一个操作DHTML表格的C++对象
Windows资源管理器Web视图界面

VC++ 中的 XP风格复活节彩蛋的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 83 ::
收藏到网摘: n/a

XP风格复活节彩蛋的实现
作者:徐景周

下载本文示例代码

如果您用过微软Office系列产品的话,一定会知道它们中很多在"关于"对话框中都隐藏了一些小功能,只有当用户点击某些特殊的键盘或鼠标按键时,这些功能才会显示出来(就象复活节彩蛋似的变出来)。您象知道类似的功能是怎么实现的么?下面,我做了个示例程序,可以告诉您它们实现的基本原理(示例中采用了整套XP风格化的界面设计)。如下图:其中图一为XP风格界面,图二为类似复活节彩蛋的实现界面。


图一


图二

基本构成思想:
实现原理很简单,初始时将隐藏的部分不显示出来(既限制对话框的高度,默认高度=总高度 -- 隐藏部分高度),再设定特殊的键盘或鼠标按鍵来激活它既可。本示例程序采用二种方式,键盘热键和鼠标热键,其中键盘热键为"关于"对话框中同时按下Ctrl+Alt+F3键可激活隐藏信息,鼠标热键则为,在"关于"对话框中同时按下Ctrl键,在Logo动态图像中双击鼠标右键既可激活隐藏信息。下面让我们来看看它的具体实现情况吧!

关键代码实现
1、 默认将隐藏部分不显示出来

#define WM_SHOWHOTKEY WM_USER + 101	//自定义系统热键消息BOOL CAboutDlg::OnInitDialog() {	//"关于"对话框中对话框可收缩效果	CRect Rect1,Rect2;	//对话框收缩时大小	GetDlgItem(IDC_DYCREDITS)->GetWindowRect(Rect1);	GetDlgItem(IDC_COPYRIGHT)->GetWindowRect(Rect2);	m_nReducedHeight = Rect1.Height()+(Rect1.top -Rect2.bottom)/2; //收缩后窗体高度	dlgRect.bottom -= (Rect1.Height()+(Rect1.top -Rect2.bottom)/2);	MoveWindow(&dlgRect);	//如果要显示对话框起始动态效果的话,不能使用该句	m_bVertical=false; //默认收缩对话框	//注册系统热键,用来显示隐藏信息<Ctrl+Alt+F3键>	RegisterHotKey(GetSafeHwnd(),WM_SHOWHOTKEY,MOD_ALT|MOD_CONTROL,VK_F3);	return TRUE; }
2、隐藏信息的激活或隐藏的函数
//功能: 是否荣誉显示void CAboutDlg::OnMore() {	m_bVertical = !m_bVertical;	if(m_bVertical == FALSE)	//不显示	{	SetDlgItemText(ID_MORE,_T("更多>>"));	SizeWindow(m_nReducedHeight,true);	}	else	//显示	{	SetDlgItemText(ID_MORE,_T("<<隐藏"));	SizeWindow(m_nReducedHeight,false);	}	UpdateWindow(); }//功能: 伸展或收缩对话框 void CAboutDlg::SizeWindow(int ReduceHeight, bool bExtend){	CRect rc;	GetWindowRect(&rc);	if(bExtend)	{	for (int i= 0; i ReduceHeight; i++)	{	rc.bottom--;	MoveWindow(&rc);	}	}	else	{	for (int i= 0; i < ReduceHeight; i++)	{	rc.bottom++;	MoveWindow(&rc);	}	}}
3、在特殊的键盘及鼠标热键下激隐藏信息显示
//功能: 鼠标热键,在图片框按住Ctrl键,双击鼠标右键可显示,显示隐藏的信息。 void CAboutDlg::OnRButtonDblClk(UINT nFlags, CPoint point) {	if(nFlags==(MK_CONTROL|MK_RBUTTON ))	{	CPictureEx *pAbout =(CPictureEx *)GetDlgItem(IDC_FLAG);	CRect rcAbout;	pAbout->GetWindowRect(&rcAbout);	CPoint pt;	GetCursorPos(&pt);	if(rcAbout.PtInRect(pt))	OnMore();	}	CDialog::OnLButtonDblClk(nFlags, point);	}//*功能:键盘热键<Ctrl+Alt+F3键>显示隐藏的信息LRESULT CAboutDlg::OnHotKey(WPARAM wParam,LPARAM lParam){	if(wParam==WM_SHOWHOTKEY)	{	OnMore();	}	return 0;}
4、别忘了收尾工作,销毁已注册的系统热键
//* 功能:程序关闭时的处理工作BOOL CAboutDlg::DestroyWindow() {	//注销已注册的系统热键	UnregisterHotKey(GetSafeHwnd(),WM_SHOWHOTKEY);	return CDialog::DestroyWindow();	}
以上部分代码具体实现的细节问题,可在下载实例代码后,仔细查看源码既可(内有详细注释)。


联系方式:
地址:陕西省西安市劳动路2号院六单元
邮编:710082
作者EMAIL:[email protected]
未来工作室(Future Studio)