王朝网络
分享
 
 
 

XP风格复活节彩蛋的实现

王朝vc·作者佚名  2006-01-08
宽屏版  字体: |||超大  

XP风格复活节彩蛋的实现

作者:徐景周

下载相关示例源码( http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=317 )

如果您用过微软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; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

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)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有