我们在写桌面程序时为了让界面好看,经常会用到窗体的自绘制功能,下面我来简单地介绍一下具体的做法,只要通过重载几个消息函数,里面添加几行代码即可实现漂亮的自绘制窗口,首先创建一个MFC对话框应用程序,然后在类视图中选择对话框类点击右键,选择“类向导”,VS2017里的这个类向导我个人觉得不友好,没有VC6.0和VS2003友好,不过没关系用多了就习惯了。
在类向导(ClassWizard)中选择WM_ERASEBKGND消息,并添加其处理函数OnEraseBkgnd(CDC* pDC),这个函数中添加重绘代码,当然也有人会问,对话框窗体重绘怎么不在WM_PAINT消息的处理函数OnPaint()中写呢?这是有windows窗口的重绘机制有关,每次重绘之前先会调用OnEraseBkgnd(CDC* pDC)消除先前内容,然后重绘,这样一来消除内容会导致窗口闪烁,所以我们直接在OnEraseBkgnd(CDC* pDC)中绘制内容,防止用白刷消除内容,这样就可以避免移动窗口时的闪烁问题,当然也可用双缓冲绘图来解决,关于双缓冲后续再介绍,双缓冲对于绘图应用很重要。窗体自绘制的代码如下:
BOOL CMFCAppTestDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/