Last Updated 2002/12/20
Programming Tips Visual C++ MFC CTreeView(CTreeCtrl)  索 引 
CTreeViewのバグ
2002/12/20

環境
WindowsNT4.0(SP4)
IE4.01(SP1)
VC++6.0
VB6.0

TreeView を VB からも使用できるように SysTreeView32 をサブクラスした OCX を作成する.

ActiveX コントロールコンテナでは正常だが,実際に VB に貼り付けてみると,階層を接続する点線のまわりの背景がグレーで描画されてしまう.

BOOL CMyTreeViewCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
    // サブクラス化
    cs.lpszClass = _T("SysTreeView32");
    cs.style |= WS_CHILD | WS_VISIBLE | WS_BORDER | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS;
    return COleControl::PreCreateWindow(cs);
}


int CMyTreeViewCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (COleControl::OnCreate(lpCreateStruct) == -1)
        return -1;
        
    // TreeView 作成
    m_pTreeCtrl = (CTreeCtrl*)this;

    // ImageList 作成
    m_imagelist.Create(IDB_TREEICON, 16, 100, RGB(255, 255, 255));
    m_pTreeCtrl->SetImageList(&m_imagelist, TVSIL_NORMAL);

    SetAppearance(1);
    return 0;
}

HTREEITEM CMyTreeViewCtrl::InsertItem(HTREEITEM hParent, LPSTR pszText, int iImage, int iSelImage, LPARAM pos)
{
    TV_INSERTSTRUCT treeitem;
    memset(&treeitem, 0, sizeof(treeitem));
    
    treeitem.hParent = hParent;
    treeitem.hInsertAfter = TVI_SORT;
    treeitem.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
    treeitem.item.pszText = pszText;
    treeitem.item.iImage = iImage;
    treeitem.item.iSelectedImage = iSelImage;
    treeitem.item.lParam = pos;
        
    return m_pTreeCtrl->InsertItem(&treeitem);
}


これは API のバグである.

以下の KB を参照(回避コード)
最終更新日: 1999/02/10
文書番号 : J046748
SDK32 : TreeView コントロール ボタンの背景が変更されない


参照
前後のTips
CTreeViewのバグ

DSS ProgrammingTipsCGI Ver2.02