错误的CListCtrl项目绘图

90天

我有从CListCtrl派生的CListCtrlEx。此列表的样式为LVS_REPORT,LVS_OWNERDRAWFIXED和LVS_EX_GRIDLINES。我增加了更改此列表字体的可能性。这可以正常工作,但是有一件不好的事情-如果我更改字体并且在此之前我还没有滚动过列表,那么所有列表项都会正确重绘,但是如果我在字体更改之前已经完成了滚动,那么列表项会重绘上一点或低于列表网格水平线,即项目文本被网格线重叠。

这是我更改列表字体的方法:

LRESULT CListCtrlEx::OnSetFont(WPARAM wParam, LPARAM)
{
   LRESULT res = Default();

   CRect rc;
   GetWindowRect(&rc);

   WINDOWPOS wp;
   wp.hwnd  = m_hWnd;
   wp.cx    = rc.Width();
   wp.cy    = rc.Height();
   wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
   SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);

   return res;
}

void CListCtrlEx::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   HDC hDC = ::GetDC(NULL);
   CFont* pFont = GetFont();
   HFONT hFontOld = (HFONT)SelectObject(hDC, pFont->GetSafeHandle());
   CRect rect;

   DrawText(hDC, _T(" "), 1, rect, DT_SINGLELINE | DT_CALCRECT);
   lpMeasureItemStruct->itemHeight = rect.bottom - rect.top;
   SelectObject(hDC, hFontOld);
   ::ReleaseDC(NULL, hDC);
}

这是它的样子:

UPD:三个人单击了UP按钮,没有人知道它可以是什么?:(

UPD 1:这是课程代码http://pastebin.com/UdXYEpF7 .h http://pastebin.com/2HYe5AEd .cpp

巴马克·谢米拉尼(Barmak Shemirani)

我尝试了您的代码,看起来ListView正在使用滚动条交换消息,标题也正在调整大小,这确实不值得研究。只需将位置设置为零就可以了,您可以保存旧位置并将其放回原处。

void CListCtrlEx::SetupFont(int nSize, const CString& strName)
{
    int saveIndex = GetTopIndex();
    EnsureVisible(0, 0);

    if (m_pFont.get()) m_pFont.get()->DeleteObject();
    VERIFY(m_pFont.get()->CreatePointFont(nSize, strName));
    SetFont(m_pFont.get());

    //This scrolls to bottom, it ensures saveIndex will end up on top 
    //once the next EnsureVisible is called
    if (GetItemCount())
        EnsureVisible(GetItemCount() - 1, 1);

    EnsureVisible(saveIndex, 1);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误的CListCtrl项目绘图

来自分类Dev

在MFC CListCtrl中获取项目文本的索引

来自分类Dev

绘图错误,公式丢失

来自分类Dev

绘图位置错误

来自分类Dev

神秘的LDA绘图错误

来自分类Dev

R绘图错误

来自分类Dev

Matlab绘图编号错误

来自分类Dev

Mathematica绘图错误

来自分类Dev

全日历绘图错误

来自分类Dev

MFC CListCtrl调整项目高度。(LVS_SMALLICON)

来自分类Dev

绘图导致“错误:尺寸错误”

来自分类Dev

Python的Matplotlib绘图顺序错误

来自分类Dev

绘图VBO导致分段错误

来自分类Dev

带符号的MATLAB绘图错误

来自分类Dev

纸js绘图(项目/路径)层次结构

来自分类Dev

WPF自定义绘图神秘绘图错误

来自分类Dev

为什么图像没有出现在mfc CListView / CListCtrl的子项目中?

来自分类Dev

禁用 HSCROLL 的 CListCtrl - 无法选择最后一个可见项目

来自分类Dev

CListCtrl选择

来自分类Dev

CListCtrl选择

来自分类Dev

使用简单绘图脚本时的属性错误

来自分类Dev

Java绘图奇怪的视觉工件/错误

来自分类Dev

Android怪异的绘图画布错误?

来自分类Dev

使用滑块进行错误绘图(python matplotlib)

来自分类Dev

表面绘图结构化数组错误

来自分类Dev

在plotly python中出现多个绘图错误

来自分类Dev

使用Python中的错误栏进行绘图

来自分类Dev

Jupyter Notebook Tensorflow Pandas绘图错误

来自分类Dev

Android怪异的绘图画布错误?