编写MFC代码,如果要想让界面更加美观,少不了自绘控件,这里稍做记录。
自绘按钮控件
1.继承CButton类
2.重载DrawItem函数,对按钮控件进行重绘
1 HDC dc = lpDrawItemStruct->hDC; //获得控件CDC 2 CDC *pDC = CDC::FromHandle(dc); 3 m_rect.CopyRect(&(lpDrawItemStruct->rcItem));//获得控件CRect 4 //填充背景 5 CBrush pBrush; 6 pBrush.CreateSolidBrush(bkColor); 7 pDC->FillRect(drawRect,&pBrush);
3.创建按钮
Create("",WS_CHILD|WS_VISIABLE|BS_OWENDRAW/*|BS_AUTOCHECKBOX*/,CRect(0,0,0,0),父窗口指针,ID);
4.重写PresubclassWindow
ModifyStyle(0,BS_OWENDRAW);
自绘控件遇到的一些问题
Q:自绘控件ID问题
A:#define IDC_BUTTON_START 2000//定义一个比较大的起始ID
子控件也定义一个起始ID
可以先SetIndex设置按钮的索引,子控件ID=起始ID+index
Q:自绘按钮创建多个,只显示创建的第一个
A:需要使用MoveWindow()设置自绘按钮控件的大小和位置
Q:在单文档视图中绘制多个控件,当窗口大小改变,视图中的控件大小和位置也需要做相应的改变
A:在View类的OnSize函数中层层调用直到控件的OnSize函数
OnSize中的cx,cy为该视图的宽高,该函数中可通过MoveWindow设置控件相对于该视图的位置