您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:43 来源:vckbase.com

本文章共2617字,分2页,当前第1页,快速翻页:
 

一种另类“关于(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

}

 
 
本文章更多内容1 - 2 - 下一页>>
相关文章

VC学习笔记之一:怎样实现XP风格按钮
基于SHA-256的HMAC文件校验器
如何在编辑框中使用IAutoComplete接口
如何在服务(Service)程序中显示对话框
Security Briefs...小心完全信任的代码
COM组件设计与应用(十八)——属性包
N皇后问题摆法算法描述
Windows SDK笔记(五):非模式对话框
语法高亮控件 PfxEditCtrl
在WinCE5中编程查找并连接周围的蓝牙设备并
为对话框中的控件增加提示的简单方法
数据库开发之窗体编程
如何使用设备描述表
MFC程序员的WTL指南: Part VIII - 属性页与
在对话框中加入属性页
深入浅出硬盘分区表
监听以太网(三) Packet32数据结构说明
在资源文件中加入声音资源
直接通过DAO读写Access文件
轻松实现DES算法查看器

相关评论


本文章所属分类:首页 VC++

  热门关键字: