怎样设置MFC的ListControl的表头和行高

解决方案 »

  1.   

    请问下MFC的表头的背景怎样设置?
      

  2.   


    #define BACK_COLOR RGB(255,128,255)
    void CMyListCtrl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    // TODO: Add your message handler code here and/or call default
    CHeaderCtrl *pHead=GetHeaderCtrl();
    CRect rc;
    pHead->GetItemRect(lpDrawItemStruct->itemID,&rc);
    HBRUSH br=CreateSolidBrush(BACK_COLOR);
    ::FillRect(lpDrawItemStruct->hDC,&rc,br);
    DeleteObject(br);
    char *pTxt=(char *)lpDrawItemStruct->itemData;
    int  len=strlen(pTxt);
    SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
    HDITEM hdItem;
    ZeroMemory(&hdItem,sizeof(hdItem));
    hdItem.mask=HDI_FORMAT | HDI_WIDTH;
    pHead->GetItem(lpDrawItemStruct->itemID,&hdItem);
    if(hdItem.fmt & HDF_CENTER)
    {
    CSize sz;// = (CDC::FromHandle(lpDrawItemStruct->hDC))->GetTextExtent(pTxt,len);
    ::GetTextExtentPoint32(lpDrawItemStruct->hDC,pTxt,len,&sz);
    rc.left += (rc.Width()-sz.cx)/2;
    }
    ::TextOut(lpDrawItemStruct->hDC,rc.left,rc.top+2,pTxt,len);
    // CListCtrl::OnDrawItem(nIDCtl, lpDrawItemStruct);
    }
      

  3.   

    表头是要重载的,他是一个独立的控件HeadCtrl
      

  4.   

    注意 head 要 修改  m_List.InsertColumn(0, "序号", LVCFMT_LEFT, 60);
    m_List.InsertColumn(1, "名称", LVCFMT_LEFT, 300);
    m_List.InsertColumn(2, "重量", LVCFMT_LEFT, 300);
    // Modify Item 1 名称
    HDITEM hdItem;
    ZeroMemory(&hdItem,sizeof(hdItem));
    hdItem.mask=HDI_FORMAT | HDI_LPARAM;
    hdItem.fmt=HDF_CENTER | HDF_OWNERDRAW;
    hdItem.lParam=(long)"名称";
    CHeaderCtrl *pHead=m_List.GetHeaderCtrl();
    pHead->SetItem(1,&hdItem);