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

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 76 ::
收藏到网摘: 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)