Visual C++ MFC CScrollView:插入符号停止闪烁

问题描述

我的英语并不完美。我正在使用带有 MFC、AMD64 版本的 Visual C++ 2019 16.9.3 社区版。单文档和多文档程序都是如此。示例程序:单文档程序。

View 类的基础是 CScrollView。 插入符号仅闪烁几秒钟,之后停止闪烁。

void CsdView::OnDraw(CDC *pDC) {
    HideCaret();
    CPoint  const pos = GetDeviceScrollPosition();
    CRect rect;
    GetClientRect(&rect);
    OffsetRect(&rect,pos.x,pos.y);
    pDC->FillSolidRect(rect,0xFFFFFF);
    CFont   font;
    font.CreatePointFont(90,L"Consolas");
    const auto  oldfont = pDC->SelectObject(&font);
    wchar_t a[12];
    for (int y = (pos.y / 54) * 54; y < rect.bottom; y += 54)
        pDC->textoutW(8,y,_itow(y,a,10));
    pDC->SelectObject(oldfont);
    ShowCaret();
}

void CsdView::OnInitialUpdate() {
    CScrollView::OnInitialUpdate();
    CScrollView::SetScrollSizes(MM_TEXT,{ 2560,40000 });
}

BOOL CsdView::OnEraseBkgnd(CDC *) {
    return  TRUE;
}

void CsdView::OnSize(UINT nType,int x,int y) {
    CScrollView::OnSize(nType,x,y);
    SetScrollSizes(MM_TEXT,{2560,40000},{(x/20)*20,(y/54)*54},{20,54});
}

void CsdView::OnSetFocus(CWnd *pOldWnd) {
    CScrollView::OnSetFocus(pOldWnd);
    CreateSolidCaret(4,48);
    SetCaretPos({0,0});
    ShowCaret();
}

void CsdView::OnKillFocus(CWnd *pNewWnd) {
    CScrollView::OnKillFocus(pNewWnd);
    HideCaret();
}

我使用的是高 DPI 显示器,在 Windows 中设置为 3 * 96 dpi = 288 dpi。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)