自绘制在UI设计中经常用到, 特别是WinCE下,为了使界面美观并具有个性化,一般的控件都使用了自绘制功能。下面简单介绍Button的自绘过程。
- void ODButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
- {
- CDC dc;
- CRect rc;
- rc = lpDrawItemStruct->rcItem;//绘图区域
- dc.Attach(lpDrawItemStruct->hDC);//得到当前设备环境
- //此处利用DC绘制Button
- dc.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,0,0));
- //下面绘制文本
- CString str;
- GetWindowText(str);
- dc.SetBkMode(TRANSPARENT);
- dc.DrawText(str,str.GetLength(),rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
- dc.Detach();//与Attach对应,取消对DC的挂接
- }
如果要使控件自绘制,有这么两个步骤:
1、设置窗口ODS_OWNERDRAW的风格,我们可以在资源视图内修改Button属性,也可以通过API来修改。
2、实现DrawItem函数,声明中应为虚函数,它用来绘制Button。如果说第一步是打开一个灯的开关,那么这步就是使灯发光发亮。
上面的代码比较简单,函数的参数是个DRAWITEMSTRUCT结构体的指针,这个结构体在控件的自绘制中占有很重要的地位,了解了它绘制图形就相对的简单了。先来看看里面的内容:
- typedef struct</