memdc.h

void CCountdownCtrl::OnPaint() { // 双缓冲绘图 CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); CRect rect; GetClientRect(&rect); CBitmap memBitmap; memBitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); memDC.SelectObject(&memBitmap); //--- 原有背景绘制 ---// // 绘制圆形背景(假设已存在) // ... [假设这里已有圆形背景绘制代码] ... //--- 新增部分:中央矩形绘制 ---// // 创建透明背景(防止文字闪烁) memDC.FillSolidRect(rect, m_bgColor); // m_bgColor需在类中定义 // 绘制中央矩形(占圆形区域的60%) CRect circleRect(10, 10, rect.Width()-10, rect.Height()-10); CRect timeRect = circleRect; timeRect.DeflateRect(circleRect.Width()*0.2, circleRect.Height()*0.2); // 绘制带圆角的矩形背景 CBrush brush(m_rectBgColor); // m_rectBgColor需在类中定义 CBrush* pOldBrush = memDC.SelectObject(&brush); memDC.RoundRect(timeRect, CPoint(15, 15)); // 15像素圆角 //--- 时间计算 ---// int h = 0, m = 0, s = 0; GetHMS(h, m, s); // 需实现GetHMS函数 //--- 字体设置 ---// CFont fontTime, fontLabel; fontTime.CreatePointFont(240, _T("Segoe UI")); // 时间数字字体 fontLabel.CreatePointFont(80, _T("Microsoft YaHei")); // 标签字体 // 主时间显示(动态布局) CString strTime; if(h > 0) { strTime.Format(_T("%02d:%02d:%02d"), h, m, s); } else { strTime.Format(_T("%02d:%02d"), m, s); } //--- 时间文本绘制 ---// CFont* pOldFont = memDC.SelectObject(&fontTime); memDC.SetTextColor(m_textColor); // m_textColor需在类中定义 memDC.SetBkMode(TRANSPARENT); // 自动调整文本大小 CRect textRect = timeRect; textRect.DeflateRect(10, 15); // 内边距 memDC.DrawText(strTime, textRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); //--- 底部标签 ---// memDC.SelectObject(&fontLabel); CRect labelRect = timeRect; labelRect.top = labelRect.bottom - 25; // 底部留出标签位置 memDC.DrawText(h > 0 ? _T("时:分:秒") : _T("分:秒"), labelRect, DT_CENTER | DT_VCENTER); //--- 资源清理 ---// memDC.SelectObject(pOldFont); memDC.SelectObject(pOldBrush); // 将内存DC复制到屏幕 dc.BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY); }补充这里未提供的代码
最新发布
03-30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值