2 qq 28254507 qq_28254507 于 2016.02.12 15:42 提问

MFC非客户区的刷新及防闪烁问题

弄重绘标题栏的时候遇到了问题。。
按钮贴图什么的都好了。但是在标题栏写“菜单”项的时候遇到了刷新的问题。
“菜单”项我是用pDC->DrawText()写上去的(“菜单”是两个字而不是按钮啥的)。
希望的效果是实时追踪鼠标的位置,若鼠标指在“菜单”所在矩形区域时就把俩字变色显示
于是我就先把之前写的字覆盖掉再重新写
但是这样就出现闪烁了。。
各位有没有好办法解决一下。。

2个回答

91program
91program   Ds   Rxr 2016.02.12 16:09
已采纳

防闪烁的基本做法就是使用双缓冲,最后显示文字时先绘制在显示缓存中,最后一次刷新显示。

qq_28254507
qq_28254507 回复91program: 已经弄好了。感谢!
接近 2 年之前 回复
qq_28254507
qq_28254507 回复91program:麻烦帮着看下。谢谢
接近 2 年之前 回复
91program
91program 回复ProgJ: 你还是另外回复吧,下面的代码没有办法看。
接近 2 年之前 回复
qq_28254507
qq_28254507 pDisplayMemDC->SetBkMode(TRANSPARENT); CFont v_font1; v_font1.CreatePointFont(132, "楷体GB_2312", pDisplayMemDC); CFont* oldfont = pDisplayMemDC->SelectObject(&v_font1); //绘制标题 pDisplayMemDC->DrawText(_T("张俊杰的有道云"), CRect(m_rtIcon.right - 2, GetSystemMetrics(SM_CYFRAME) + 4, 400, GetSystemMetrics(SM_CYSIZE) + 60), DT_NOCLIP | DT_SINGLELINE); //pDisplayMemDC是缓冲DC,怎么把其文字显示到dc中。。
接近 2 年之前 回复
qq_28254507
qq_28254507   2016.02.12 19:20

CDC* pDisplayMemDC = new CDC; //缓冲区DC
pDisplayMemDC->CreateCompatibleDC(pDC);
pDisplayMemDC->SetBkMode(TRANSPARENT);

CFont v_font1;
v_font1.CreatePointFont(132, "楷体GB_2312", pDisplayMemDC);
CFont* oldfont = pDisplayMemDC->SelectObject(&v_font1);

//绘制标题
pDisplayMemDC->DrawText(_T("XXXXXXX"), CRect(m_rtIcon.right - 2, GetSystemMetrics(SM_CYFRAME) + 4, 400, GetSystemMetrics(SM_CYSIZE) + 60), DT_NOCLIP | DT_SINGLELINE);

然后怎么把其文字显示到dc中。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!