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

2016-01-29 11:58 12 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

作者:戚高

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

下载源代码

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

正文
  显示帮助文件的时候我采用的是全屏的显示方法,但是如果就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 defaultFindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);//恢复任务栏CFrameWnd::OnClose();}
  到这里,基本准备工作我们已经完成了,下面的任务是贴背景位图和创建显示的对话框。贴背景位图:装载背景位图,映射VIEW的WM_PAITN消息,然后贴上背景位图,同时映射WM_EARSEBKGND消息,去处屏幕的擦除工作,将返回语句修改成为:return TRUE就可以了。
void CAboutDemoView::OnPaint(){// TODO: Add your message handler code hereCPaintDC 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控件占满对话
                        

来源:https://www.tulaoshi.com/n/20160129/1484053.html

延伸阅读
问题 有的程序员希望在自己的应用程序中以有趣味的位图来代替对话框中令人讨厌的灰色背景,希望位图在对话框中看起来象墙纸而且并不影响对话框中的控制或静态文本的显示。 许多程序员找不到一个改变窗口背景的简单方法,是否有方法利用 Windows API 函数来改变对话框的背景为某个位图呢? 方法 改变对话框的背景为某个位图并不...
自绘对话框 作者:Alon 下载示例源代码 闲来无事,写了一个简单的对话框界面,希望给需要的朋友有所帮助。 界面如下: 界面很单调,我只是想说明一下如何实现界面的自绘。如果有需要,也可以绘制更复杂漂亮的界面。 程序的实现也不复杂,接下来就跟着我一步一步做。...
平时使用VB编程时需要用到"打开文件"类似的对话框时我们一般需要添加一个commondialogue的控件。使用这个控件能完成如“打开”,“另存”,“颜色”,“打印”等众多的功能,但是如果一个功能很简单的程序,使用这个控件却也造成了一些不必要的麻烦。一个是需要安装,再个增加了发布文件包的体积。 ...
标签: PS PS教程
      横轴代表像素本身的两度,竖轴代表新调节的亮度。中间的直线代表目前输入与输出之间的关系。可以单击某个Channels,进行Curves设置,或按Shift键选择两个以上的Channels.     在图像中准备要调节亮度的地方按下鼠标,一个圆出现在Curves对话框中的直线上。拖动这个圆即可调节图...
在对话框程序中,我们经常是利用对话框上的子控件进行命令响应来处理一些事件。如果我们想要让对话框(子控件的父窗口)类来响应我们的按键消息,我们可以通过ClassWizard对WM_KEYDOWN消息进行响应,当程序运行后,我们按下键盘上的按键,但对话框不会有任何的反应。这是因为在对话框程序中,某些特定的消息,例如按键消息,它们被Windows内部...

经验教程

431

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部