[00009]-[2015-08-24]-[00]-[Windows 程序设计 --- MFC 基于对话框的界面美化]

一直在思考如何用VC6.0的MFC进行基于对话框程序的GUI美化工作;

需要贴图,首先需要使对话框的大小与贴图(BMP,这里没有使用GDI+,只是纯粹使用了GDI来绘制Bitmap位图图片)

设置对话框的属性字体为【宋体12】,可以较好地处理像素的问题,此时对话框单位长度是图片像素的两倍,便于处理

对话框的BOOL CMyDlg::OnInitDialog() 初始化函数中需要添加对话框位置大小设置代码

{

  /*DWORD dwStyle = GetStyle();//获取旧样式
  DWORD dwNewStyle = WS_OVERLAPPED | WS_VISIBLE| WS_SYSMENU |WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  dwNewStyle&=dwStyle;//按位与将旧样式去掉
  SetWindowLong(m_hWnd,GWL_STYLE,dwNewStyle);//设置成新的样式
  DWORD dwExStyle = GetExStyle();//获取旧扩展样式
  DWORD dwNewExStyle = WS_EX_LEFT |WS_EX_LTRREADING |WS_EX_RIGHTSCROLLBAR;
  dwNewExStyle&=dwExStyle;//按位与将旧扩展样式去掉
  SetWindowLong(m_hWnd,GWL_EXSTYLE,dwNewExStyle);//设置新的扩展样式*/
  SetWindowPos(NULL,0,0,453,386,SWP_NOZORDER|SWP_NOMOVE|SWP_FRAMECHANGED);//告诉windows:我的样式改变了,窗口位置和大小保持原来不变!

  //SetWindowPos(0,0,0,453,386,SWP_NOMOVE); //SWP_NOZORDER|
  m_newBtn.SetWindowPos(NULL, 300, 310, 135, 62, SWP_NOZORDER);

}

为对话框添加WM_ERASEBKGND消息处理函数 有人会提问VC6.0的类向导中没有找到WM_ERASEBKGND,这需要我们为对话框的处理消息进行重新过滤

BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBitmap bmp;
CDC memdc;
memdc.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = memdc.SelectObject(&bmp);
bmp.LoadBitmap(IDB_BITMAP1);
memdc.SelectObject(&bmp);
pDC->BitBlt(0,0,453,386,&memdc,0,0,SRCCOPY);
memdc.SelectObject(pOldBitmap);
bmp.DeleteObject();

return true;

return CDialog::OnEraseBkgnd(pDC);
}

 

效果如下图:

 

posted @ 2015-08-24 13:41  Auris  阅读(1568)  评论(0编辑  收藏  举报