现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

MFC实现对话框背景色及背景图片

2012-07-08 22:27 工业·编程 ⁄ 共 1354字 ⁄ 字号 暂无评论

    MFC界面编程无非不是根据已有类函数对控件进行设置,就是重载类函数重绘控件,达到自己想要的效。思路是很简单,但是实际操作起来就。。。。。

    之前用了SkinPPWTL.dll来加载皮肤完成了界面的美化,使用起来很简单,导入库函数,加载DLL,在APP文件InitInstance()里面初始化,加载皮肤,最后在ExitInstance() 释放变量即可。虽然可用的皮肤很少,但是比起系统默认的界面要好很多。在后来发现对话框上的右键很容易引起系统崩溃。。。。只好放弃,开始自己的MFC界面编程之旅。

1.对话框背景色

设置对话框背景色最好是在app类中进行,这样整个程序的对话框的背景色就会是统一的。在app类的InitInstance()函数的开始就this->SetDialogBkColor(RGB(236,236,234) ,RGB(0, 0, 0));前一个RGB设置的是背景的颜色,后面那个设置的是字体的颜色,个人认为最好的背景色就是白色,白色百搭啊。设置好运行程序发现static控件颜色还是原来的,这样显得很难看,我们在dlg类中设置一个画刷m_brush.CreateSolidBrush( RGB(236, 236,234));重载ON_WM_CTLCOLOR来重绘,在函数体里面HBRUSH CXXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  if(   nCtlColor   ==   CTLCOLOR_BTN  )  
  return   m_brush;
if(   nCtlColor   ==   CTLCOLOR_STATIC   )  
  return   m_brush;  
   if(nCtlColor==CTLCOLOR_LISTBOX)
   {
    pDC->SetBkMode(TRANSPARENT);
    return   m_brush;
    }
return hbr;
}不过貌似对我在子对话框中的listbox没有起作用,我只好在有listbox的那个类又重载了ON_WM_CTLCOLOR。呵呵。这样整体的背景都统一了,除了messagebox(),这个需要我们重新写一个对话框来实现messagebox的功能。

2.背景图片

用图片和用颜色的差别只有你要先导入背景图片,然后设置画刷,在ON_WM_CTLCOLOR里面重绘就可以了。在初始化函数OnInitDialog()里面

m_bitmap.LoadBitmap(IDB_MAIN1);//CBitmap m_bitmap;
m_brush.CreatePatternBrush(&m_bitmap);//CBrush  m_brush;

ON_WM_CTLCOLOR里面的内容和画背景色的内容一样。这样子就需要专业的美工设置一下界面的整体格局了。

3.对话框边框

光是一个背景色或者背景图片远远达不到界面美化的效果,我们要把整个对话框的架子换了,脱胎换骨。当然我们可以在对话框的属性上做点小手脚,把对话框设置成无边框模式,这样我们自己做一个背景图片,再在上面加标题栏图片,关闭图片,最小化图片等等。

给我留言

留言无头像?