none
Windows7 Aero でツリーコントロールのアイテムのドラッグ時に描画が乱れる RRS feed

  • 質問

  • VS2008 VC++にてツリーコントロールのアイテムのドラッグ&ドロップを実装しています。
    これをWindows7で実行するとドラッグ中のアイテムの表示が乱れてしまいます。
    ドラッグイメージと重なっているアイテムの再描画がうまくいっていないようです。

    以下、現在分かっている範囲の現象発生条件です。
    ・Windows7 Aero有効時にのみ発生。無効時には発生せず。
    ・コモンコントロールVersion5にて発生。Version6にすると発生せず。

    ビジュアルスタイルを変更せずにこの現象を回避する方法はありますでしょうか?

    -------- 以下 ツリーアイテムのドラッグ部分のソースの一部 --------

    void CMyTreeCtrl::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    m_hitemDrag = pNMTreeView->itemNew.hItem;
    SelectItem(m_hitemDrag);

    if(!(m_pDragImage = CreateDragImage(m_hitemDrag)))
    {
    return;
    }

    m_bDrag = TRUE;
    m_pDragImage->BeginDrag(0, CPoint(0, 0));

    POINT pt = pNMTreeView->ptDrag;
    ClientToScreen(&pt);
    m_pDragImage->DragEnter(NULL, pt);

    SetCapture();
    *pResult = 0;
    }

    void CMyTreeCtrl::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (m_bDrag)
    {
    HTREEITEM hItem = HitTest(point, NULL);

    POINT pt = point;
    ClientToScreen(&pt);
    m_pDragImage->DragMove(pt);

    // ドロップ先の強調表示
    if (hItem)
    {
    m_pDragImage->DragShowNolock(FALSE);
    SelectDropTarget(hItem);
    m_pDragImage->DragShowNolock(TRUE);
    }
    }
    CTreeCtrl::OnMouseMove(nFlags, point);
    }
    2010年11月19日 5:23