桌面时钟(GDI实现) 学习总结

这篇博客总结了使用GDI技术实现桌面时钟的过程,包括双缓冲消除闪屏、蜂鸣器播放音乐、多线程编程、颜色对话框选择图形色彩以及定时器实时更新时间等功能。作者分享了学习中的经验教训,强调应从主对话框的绘图函数开始理解代码,并注意对话框类与属性类之间的关系。
摘要由CSDN通过智能技术生成
// 很完整的在对话框上绘制矩形的格式
void ScaleSetDlg::OnPaint()
{
CPaintDC dc(this);
CPen penBorder(PS_SOLID,1,RGB(255,255,255));
CPen *ppenOld = dc.SelectObject(&penBorder);
CBrush brPoint(m_color);
CBrush* pbrOld = dc.SelectObject(&brPoint);


dc.Rectangle(180,55,240,85);


dc.SelectObject(ppenOld);
dc.SelectObject(pbrOld);
}




// 很完整的在对话框上 贴图(Bitmap格式)

CBitmap maskbmp,logbmp;
maskbmp.LoadBitmap(IDB_LOGMASK);
logbmp.LoadBitmap(IDB_LOG);


CDC MaskDC,memDC;
MaskDC.CreateCompatibleDC(pDc);
MaskDC.SelectObject(&maskbmp);
memDC.CreateCompatibleDC(pDc);
memDC.SelectObject(&logbmp);
// 不知道为什么要两个同时弄,可能是需要混合原来的颜色
pDc->BitBlt(m_ptMiddle.x - 25 ,ptMiddle.y - nRidius * 0.7,96,96,&MaskDC,0,0,SRCAND);
pDc->BitBlt(m_ptMiddle.x - 25,ptMiddle.y - nRidius * 0.7,96,96,&memDC,0,0,MERGEPAINT);


// 精确的求出 刻度的位置
CPoint CClockScale::ComputerFacePoint(UINT min, int nFaceLength)
{
CPoint ptCalc;
//将分钟转换为角度数 , 这段核心的代码看不懂
double fDegrees = 180+((15+min)%60)*6;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值