0

問題が見つかりました。のヘッダーのデフォルトのソート矢印を変更できませんCMFCListCtrl。msdn に関する投稿を見つけましCMFCHeaderCtrl::OnDrawSortArrowたが、例がないため役に立ちませんでした。

とをCListCtrl介してヘッダーに矢印を設定する簡単な方法を試しましたが、右側にはすでに矢印のデフォルトがあるため、これらの矢印は左側にのみ設定されます。CimageListHDITEM

Google は、デフォルトの矢印を変更する方法については空ですCMFCListCTrl

助けてください)ありがとう!PS。これは、矢印を簡単に追加できる場所ではCMFCListCtrlないことに注意してください。CListCtrl

4

2 に答える 2

0

CMFCHeaderCtrl は、現在アクティブな Visual Manager を呼び出して、並べ替え矢印の実際の描画を行います。基本クラスの矢印描画メソッドをオーバーライドする、カスタマイズされたビジュアル マネージャーを実装するのは簡単です。

class CMyVisualManager:public CMFCVisualManagerOffice2007
{
    virtual void OnDrawHeaderCtrlSortArrow(CMFCHeaderCtrl* pCtrl, CDC* pDC, CRect& rect, BOOL bIsUp);
};


void CMyVisualManager::OnDrawHeaderCtrlSortArrow(CMFCHeaderCtrl* pCtrl, CDC* pDC, CRect& rectArrow, BOOL bIsUp)
{
   BOOL bDlgCtrl = pCtrl->IsDialogControl();

   CPen penDark(PS_SOLID, 1, bDlgCtrl ? afxGlobalData.clrBtnDkShadow : afxGlobalData.clrBarDkShadow);

   CPen* pPenOld = pDC->SelectObject(&penDark);;
   ASSERT_VALID(pPenOld);

   if (!bIsUp)
   {
      pDC->MoveTo(rectArrow.CenterPoint().x, rectArrow.bottom);
      pDC->LineTo(rectArrow.CenterPoint().x, rectArrow.top);

      pDC->MoveTo(rectArrow.CenterPoint().x-2, rectArrow.top+4);
      pDC->LineTo(rectArrow.CenterPoint().x+3, rectArrow.top+4);

      pDC->MoveTo(rectArrow.CenterPoint().x-1, rectArrow.top+3);
      pDC->LineTo(rectArrow.CenterPoint().x+2, rectArrow.top+3);
      pDC->MoveTo(rectArrow.CenterPoint().x-1, rectArrow.top+2);
      pDC->LineTo(rectArrow.CenterPoint().x+2, rectArrow.top+2);
   }
   else
   {
      pDC->MoveTo(rectArrow.CenterPoint().x, rectArrow.top);
      pDC->LineTo(rectArrow.CenterPoint().x, rectArrow.bottom);

      pDC->MoveTo(rectArrow.CenterPoint().x-2, rectArrow.bottom-4);
      pDC->LineTo(rectArrow.CenterPoint().x+3, rectArrow.bottom-4);

      pDC->MoveTo(rectArrow.CenterPoint().x-1, rectArrow.bottom-3);
      pDC->LineTo(rectArrow.CenterPoint().x+2, rectArrow.bottom-3);
      pDC->MoveTo(rectArrow.CenterPoint().x-1, rectArrow.bottom-2);
      pDC->LineTo(rectArrow.CenterPoint().x+2, rectArrow.bottom-2);
   }

   pDC->SelectObject(pPenOld);
}
于 2015-05-18T14:19:15.227 に答える