XP风格复活节彩蛋的实现

军啊你

军啊你

2016-01-29 11:52

XP风格复活节彩蛋的实现,XP风格复活节彩蛋的实现

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例代码

如果您用过微软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:jingzhou_xu@163.net
未来工作室(Future Studio)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

XP风格复活节彩蛋的实现

C语言教程 C语言函数
XP风格复活节彩蛋的实现

复活节彩蛋是什么?复活节彩蛋怎么做

彩蛋 复活节 节日 习俗
复活节彩蛋是什么?复活节彩蛋怎么做

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

复活节彩蛋的简单做法 教你做美丽的复活节彩蛋

彩蛋 彩绘 复活节
复活节彩蛋的简单做法 教你做美丽的复活节彩蛋

复活节彩蛋diy教程

手工设计 手工小制作 diy手工 diy手工艺品
复活节彩蛋diy教程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

复活节送什么礼物?复活节送彩蛋还是兔子?

复活节 礼物 节日 习俗
复活节送什么礼物?复活节送彩蛋还是兔子?

用Delphi制作“复活节彩蛋”

Delphi
用Delphi制作“复活节彩蛋”

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

接触VC之三:MFC基于对话框程序

接触VC之三:MFC基于对话框程序

AutoCAD教程:绘制冷兵器之剑的建模过程

AutoCAD教程:绘制冷兵器之剑的建模过程
下拉加载更多内容 ↓