如何取得一个列表控件 的真实高度?

解决方案 »

  1.   

    CListCtrl m_List;
    CDC *dc = m_List.GetDC();
    CRect rect;
    m_List->GetClientRect(&rect);
    dc->SetMapMode(MM_HIMETRIC);  //0.01毫米
    CSize leftUp(rect.left, rect.top);
    CSize rightDown(rect.right, rect.bottom);
    dc->DPtoHIMETRIC(leftUp);
    dc->DPtoHIMETRIC(rightDown);
    int actualHeight = abs(rightDown.cy - leftUp.cy);
    dc->SetMapMode(MM_ANISOTROPIC);
    m_List.ReleaseDC;
      

  2.   

    多谢 tsaiyc(),我试一下看。
      

  3.   

    void GetWindowRect(
       LPRECT lpRect 
    ) const;class CListCtrl : public CWnd所以用GetWindowRect应该就可以获得
      

  4.   

    首先重载CListCtrl,选择自绘模式.
    重载函数void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
    lpMeasureItemStruct->itemHeight就是你需要的item高度~~
      

  5.   

    我试过了3位好像都不对,这样行吗?
    CRect   m_rectClient;//客户区大小   
    m_MyListCtrl.GetClientRect(&m_rectClient);
    int ClientHeight=m_rectClient.Height();  //控件的高度,但好像也不准确。另外,如果分辨率变化了又怎么办?
      

  6.   

    想问下你需要的高度是实际高度(用格尺量listctrl得出的高度),还是logical单位,或者是device单位?根据需要将映射模式改为相应的就行
      

  7.   

    我的目的是想在ClistCtrl中插入15行Item,现在已经能够控制每一行的Item的高度,这样只要知道ClistCtrl的高度,然后除以15就是Item的高度了。问题是ClistCtrl的高度是随着分辨率而改变的,这该怎么办?
      

  8.   

    我原来是根据分辨率大约估算的,但是如果分辨率高的话就不准确:
    int ClientHeight=::GetSystemMetrics(SM_CYSCREEN)*0.78-109; //估算的ClitCtrl高度
    int Height = ClientHeight/15;