分享
 
 
 

一种另类“关于(About)”对话框的动态显示方法

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

一种另类“关于(About)”对话框的动态显示方法

作者:戚高

下载源代码

介绍

一般的系统帮助文件在显示关于帮助信息的时候大部分采用的方法是静态的形式将要显示的内容显示到界面上,由于这次担任项目开发,我总觉得那样太单调了,于是,在各个网站搜索后发现了一个很好的控件类(字模显示控件类),于是我进行扩充完成了一些动态显示的功能,完成后的各种要显示的帮助信息能够象放映电影一样的进行动态显示,效果蛮好的,现将制作过程合代码及演示效果写出来,希望对这个方面有研究或者寻求好方法的人有帮助。同时本文章代码中显示的文本信息各位可以根据需要进行自己修改。

正文

显示帮助文件的时候我采用的是全屏的显示方法,但是如果就VIEW全屏的方法的话我总觉得太难看了,于是我首先在全屏的基础上贴上一个背景图片,然后在背景图片上加载一个功能显示就可以了。其实简单的方法是在背景图片上直接动态创建一个CSTATIC控件就可以了,不过由于我的系统涉及到别的许多功能界面要处理,所以我用了一个对话框的形式,采用无模式对话框形式,然后将她创建完成后MOVEWINDOW到指定位置就可以了。

制作步骤

启动VC,建立一个基于CVIEW的单文档功能,其余保持默认设置就可以了。全屏的概念我没有象传统的那样进行,而是将主框架MoveWindow到屏幕的分辨率大小,然后去掉标题兰,菜单栏,工具栏,状态栏等显示就差不多一个全屏的效果了,然后在这个上面贴上背景图片就可以了。也许这个根本不能算全屏的概念(^_^)。具体实现步骤如下:

修改APP的InitInstance()函数,修改的地方如下:

// The one and only window has been initialized, so show and update it.

m_pMainWnd-SetMenu(NULL);//去掉菜单

m_pMainWnd-ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);//修改窗体属性

m_pMainWnd-MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),

::GetSystemMetrics(SM_CYSCREEN)),TRUE);//将窗体移动到屏幕的分辨率大小地方?

m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);//这个就不要解释了

m_pMainWnd-UpdateWindow();

然后修改MainFrame类成员函数去掉工具栏合状态栏就可以了.修改PreCreateWindow(CREATESTRUCT& cs)函数,修改如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

return -1;

//隐藏任务栏,不隐藏的话,这个东西总是在不适当的时候出现影响整体效果

FindWindow("Shell_TrayWnd",NULL)-ShowWindow(SW_HIDE);

return 0;

}

上面步骤隐藏了WINDOWS任务栏,所以我们必须在程序退出的时候进行恢复,不要程序结束了也不会见到的。由于程序退出要发送WM_CLOSE消息,所以我们截获MainFrame的WM_CLOSE消息就可以了,在这里恢复状态栏,代码如下:

void CMainFrame::OnClose()

{

// TODO: Add your message handler code here and/or call default

FindWindow("Shell_TrayWnd",NULL)-ShowWindow(SW_SHOW);//恢复任务栏

CFrameWnd::OnClose();

}

到这里,基本准备工作我们已经完成了,下面的任务是贴背景位图和创建显示的对话框。

贴背景位图:装载背景位图,映射VIEW的WM_PAITN消息,然后贴上背景位图,同时映射WM_EARSEBKGND消息,去处屏幕的擦除工作,将返回语句修改成为

:return TRUE就可以了。

void CAboutDemoView::OnPaint()

{

// TODO: Add your message handler code here

CPaintDC dc(this); // device context for painting?

HBITMAP hbitmap;

hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));

HDC hMenDC=::CreateCompatibleDC(NULL);

SelectObject(hMenDC,hbitmap);

::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);

::DeleteDC(hMenDC);

::DeleteObject(hbitmap);

// Do not call CView::OnPaint() for painting messages

}

建立一个用于显示相关信息的对话框资源,修改对话框属性,Style-Popup,Border-None;并建立对话框类CShowAboutDlg;然后在对话框上面放置一个CSTATIC控件,并调整位置。在VIEW中创建这个无模式的对话框然后显示:

CShowAboutDlg *m_pAboutDlg;

CRect rect;

m_pAboutDlg = new CShowAboutDlg();

m_pAboutDlg-Create(IDD_ABOUT);

m_pAboutDlg-MoveWindow(CRect(18,18,

::GetSystemMetrics(SM_CXSCREEN)-13,

::GetSystemMetrics(SM_CYSCREEN)-16),

TRUE); //因为背景图片有一个边框,所以这里应该吧那个位置留出来

m_pAboutDlg-GetClientRect(&rect);

m_pAboutDlg-m_AboutCtrl.MoveWindow(rect,TRUE);//是这个PIC控件占满对话框客户区域

m_pAboutDlg-ShowWindow(SW_SHOW);

下面就是加入字模显示控件类的文件了。将ZgMemDC,ZgDraw.h,ZgDraw.cpp,TitleShow.h,TitleShow.cpp,PublicClass.cpp,PublicClass.h加入工程

,然后加入AutoFont.h和AutoFont.cpp,这个类功能不用说了,在上篇文章中我已经介绍了。在那位提供字模显示控件类的基础上,我修改了其中的适量代码

,进行了文字显示方面的修改,因为那个原来的类的字体不适合我们现在系统显示的要求(^_^)。然后就是在对话框类中加载显示消息就可以了。定义显示CSTATIC类对象位TitleShow,然后在初始化里面添加你的信息显示内容:

****

其中还有一步就是截获回车和ESC键对对话框的退出工作。

BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if(pMsg->message == WM_KEYDOWN)

{

switch(pMsg->wParam)

{

case VK_RETURN:

return TRUE;

case VK_ESCAPE:

return TRUE;

}

}

return CDialog::PreTranslateMessage(pMsg);

}

至此,程序基本工作已经完成了,编译运行你的工程看看效果吧。下面是我做的模拟演示效果,贴几张图片上来。如果有什么问题可以直接和我联系:13975102873@hnmcc.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有