rt

解决方案 »

  1.   

    只有owner draw的才会调用?你的子窗口如果没有owner draw,就不会调用
      

  2.   

    如果是ListView,需要设置窗体风格LVS_OWNERDRAWFIXED
      

  3.   

    有的窗口根本不会调用DrawItem的,比如CHeadCtrl类,这时你只能重载它的OnPaint函数实现自绘。
      

  4.   

    并不是所有窗口都调用DrawItem,不同的窗体类型调用不同的自绘函数。
      

  5.   

    我要对子窗口进行重绘,那可咋办啊
    子窗口里有个继承了CListCtrl的子类,但是不知道如何重绘子类控件啊
      

  6.   


    void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDIS) 

    CDC* pDC = CDC::FromHandle(lpDIS->hDC); LVITEM lvi = {0}; 
    lvi.mask = LVIF_STATE;//|LVIF_IMAGE; 
    lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ; 
    lvi.iItem = lpDIS->itemID; 
    BOOL bGet = GetItem(&lvi); BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) && 
    ((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS)))); // 画文本背景 
    CRect rcBack = lpDIS->rcItem; 
    pDC->SetBkMode(TRANSPARENT); 
    if( bHighlight ) 

    pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); 
    pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT))); 

    else 

    if (lpDIS->itemID%2 ==0) 

    pDC->SetTextColor(0x0C0F80); 
    pDC->FillRect(rcBack, &CBrush(0xEEF1E3)); 

    else 

    pDC->SetTextColor(RGB(0,128,255)); 
    pDC->FillRect(rcBack, &CBrush(0xE3e3e3)); 

    } //设置字体颜色 
    CString str; //得到焦点大小 
    CRect rcFocus = lpDIS->rcItem; 
    rcFocus.DeflateRect(1,1,1,1); if (lpDIS->itemAction & ODA_DRAWENTIRE) 

    //写文本 
    CString szText; 
    for (int i = 0; i < /*GetColumns()*/10; i++) 
    { //循环得到文本 
    CRect rcItem; 
    if ( !GetSubItemRect(lpDIS->itemID, i, LVIR_LABEL, rcItem )) 
    continue; 
    szText = GetItemText( lpDIS->itemID, i ); rcItem.left += 5; rcItem.right -= 1; 
    pDC->DrawText(szText/*szText*/, lstrlen(szText), &rcItem, DT_CENTER|DT_VCENTER|DT_NOPREFIX|DT_SINGLELINE); 

    } }
      

  7.   

    我改了,但是还是不行啊,怎么才能让子窗口执行DrawItem()啊,或者间接执行也行