一种可用于系统动态显示关于信息的方法
2009-11-11 20:30:07 来源:WEB开发网到这里,基本准备工作我们已经完成了,下面的任务是贴背景位图和创建显示的对话框.
贴背景位图:装载背景位图,映射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);
}
至此,程序基本工作已经完成了,编译运行你的工程看看效果吧.
更多精彩
赞助商链接