自绘控件

编写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设置控件相对于该视图的位置

参考

https://www.cnblogs.com/ahcc08/p/6082478

Blog.csdn.net/wyansai/article/details/50990783

猜你喜欢

转载自www.cnblogs.com/huangsitao/p/10298769.html
今日推荐