如何解决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 举报,一经查实,本站将立刻删除。