至此为止,我们已经把自己的Panel整合入Windows的应用程序中了。接下来,我们对Panel进行底色的涂刷。
前两节说过,因为Panel继承自CWnd,所以它现在可以接受windows的显示消息了。
在类视图窗口中选中Panel类,在属性窗口中点选消息按钮,可以看到所有的Windows消息。找到WM_PAINT消息,添加对应的处理函数 OnPaint。
然后就要用到MFC的GDI的一些类来画图了。
最重要的是C***DC(Device Context)类。其实可以把DC想象成是画板,所有的画图操作都要通过画板来完成。
DC类提供了很多画图方法,drawIcon, fillRect等等。
还有一些其他对象,CBitmap, CBrush, CFont,CPen等,可以用来画出不同的字体,或颜色。
我们简单给Panel刷个灰的底色:
void Panel::OnPaint() { CPaintDC dc(this); // device context for painting CRect rect; this->GetClientRect(rect); CBrush brushbg( RGB(125,125,125) ); dc.FillRect(rect,& brushbg);
这里面还有一个GetClientRect的方法,这是CWnd的一个方法。可以得到当前窗口对象的内部大小
我们Panel的构建实在Dlg.h文件里面有一句 Panel m_Panel;来实现的。
创建的时候并没有设定窗体大小。
因为Panel是跟资源中IDC_PANEL捆绑在一起的。所以创建完成后,Dlg会自动按照IDC_PANEL的大小设定Panel.
这样,我们只需要通过GetClientRect的方法,就可以得到Panel实际的的大小尺寸了。
Rect其实就是Rectangle的缩写,里面保存着上下左右位置信息。
好了,运行一下代码,可以看到原来放Static Text的地方成了灰色的一块。OK!