qq_28254507
ProgJ
采纳率88.1%
2016-02-12 07:42

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

10
  • c++
已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • 91program 91program 5年前

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

    点赞 1 评论 复制链接分享
  • qq_28254507 ProgJ 5年前

    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中。。

    点赞 评论 复制链接分享