ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
1.自绘按钮需要创建CButton派生类 2.添加函数 DrawItem(LPDRAWITEMSTRUCT lpDls) ```c++ void CButtonEx::DrawItem(LPDRAWITEMSTRUCT lpDls) { // TODO: 添加您的代码以绘制指定项 CDC dc; // CRect rect(lpDls->rcItem);// dc.Attach(lpDls ->hDC);//使用此成员函数将hDC附加到CDC对象 dc.SetTextColor(RGB(0,128,0)); //switch(lpDls->CtlID);//获取控件id dc.SelectStockObject(LTGRAY_BRUSH);//填充系统背景色 //dc.Rectangle(rect);//画一个矩形 /*FillSolidRect 调用此成员函数以使用指定的纯色填充给定矩形*/ /*GetSysColor(COLOR_BTNFACE)检索指定显示元素的当前颜色。 显示元素是窗口的一部分和显示在系统显示屏幕上的显示*/ dc.FillSolidRect(rect,GetSysColor(COLOR_BTNFACE)); if (lpDls->itemState & ODS_SELECTED) { dc.DrawEdge(rect,BDR_SUNKENINNER,BF_RECT);//内陷 rect.OffsetRect(1,1);//往右下角偏移 } else dc.DrawEdge(rect,BDR_RAISEDINNER,BF_RECT);//鼓起 int n = rect.Height(); n = (n-15)/2; if (lpDls->itemState & ODS_SELECTED) n += 2;//图标往右偏移 //加载图标 DrawIconEx(lpDls->hDC,n,n,m_hIcon,15,15,0,0,DI_NORMAL); CRect rc = rect; rc.left = n+12; CString str; GetWindowText(str); dc.SetBkMode(TRANSPARENT);//TRANSPARENT 在绘制之前不更改背景 dc.DrawText(str,rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE );//字体居中 //焦点状态 if (lpDls->itemState & ODS_FOCUS) { rect.DeflateRect(2,2); dc.DrawFocusRect(rect);//获得焦点 } dc.Detach();//反函数成对使用 } HICON CButtonEx::SetIcon(HICON hIcon) { HICON hOld = m_hIcon;//旧hicon m_hIcon = hIcon;// return hOld;//返回旧hicon } void CButtonEx::SetIcon(UINT nID) { m_hIcon = AfxGetApp() ->LoadIcon(nID); } ``` 3.在主对话框的要自绘的按钮 添加 派生类变量CButtonEx -> m_add 控件变量m_add 类型是CButtonEx 加载头像 m_add.SetIcon(IDI_ADD);//IDI_ADD 进程内的头像