当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 一种另类“关于(About)”对话框的动态显示方法
| 一种另类“关于(About)”对话框的动态显示方法 下载源代码 // 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控件占满对话 |