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