ツリーコントロールのアイテムの移動について – プログラミング – Home

ツリーコントロールのアイテムの移動につ...
 
通知
すべてクリア

[解決済] ツリーコントロールのアイテムの移動について


DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

WinXP VS2005 MFC SDI

こんにちは。
早速ですが質問させてください

CTreeViewの派生クラスのツリーコントロールの
アイテムを移動する関数を自作したのですが、
移動したアイテムが消えてしまうという現象に困っています。

ツリービューにはラインとアイコンと+-を表示しています。

必ず消えるというわけではなく
あるパターンがあるようなのですが、はっきりとはしません。

1.-+が付いていないアイテムに移動すると消えやすい。

2.A---B---CーーーD
   |
   E--F
DをFに移動すると消えやすい。
ABCだと多分消えない

じっさいはD&Dのあとの関数呼び出しで
OnUpLMouseで呼び出しています。

デバッガで追っても、下の関数が
エラーて処理抜けすることはありません。
InsertItemも成功しています。

よろしくお願いします。

HTREEITEM CMyTreeView::MoveTreeItem(HTREEITEM hThisItem, HTREEITEM hToItem)
{
if( !hThisItem || !hToItem )
{
return NULL;
}

//Docの取得
CMyDoc* pDoc = dynamic_cast<CMyDoc*>( this->GetDocument() );
if (!pDoc){ return NULL;}

CTreeCtrl* pTree = &this->GetTreeCtrl();
if( pTree )
{
TCHAR szBuffer[ STRING_LENGTH ];
TVITEM item;
item.hItem = hThisItem;
item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_PARAM|TVIF_STATE
|TVIF_HANDLE|TVIF_SELECTEDIMAGE|TVIF_CHILDREN;
item.pszText = szBuffer;
item.cchTextMax = STRING_LENGTH;//4096

//アイテム情報取得
if( !pTree->GetItem( &item ) ){ return NULL; }

//アイテムのコピー
TVINSERTSTRUCT insertItem;
insertItem.hParent = hToItem;
insertItem.hInsertAfter = TVI_LAST;
memcpy_s( &insertItem.item, sizeof(TVITEM), &item, sizeof(TVITEM) );
const HTREEITEM hNewItem = pTree->InsertItem( &insertItem );
if( !hNewItem ){ return NULL; }

if( 1 )
{
//コピー元削除
pTree->DeleteItem( hThisItem );
//コピー先選択
pTree->SelectItem( hNewItem );

return hNewItem;
}
else
{
pTree->DeleteItem( hNewItem );
}
}
return NULL;
}


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

hThisItemとhNewItemが同じものを指しているようなケースは無いですか?
書いてある内容を見るだけだとそのくらいしか思いつきませんけれど。
なぜそうなるのかまでは色々調べてみないと解りませんけれど。


返信引用
DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

PATIOさん

返信ありがとうございます。

if( hThisItem == hToItem )
{
afxMessage...
}

を加えても引っかかりませんでした。

とりあえず、GetItemで取れている値は正常なので、
InsertItemの関数を「文字,親,アイコン」系に変えて
SetStateで値をコピーする方法に変えることで
正常に動作しました。

他は変えていないので
TVINSERTSTRUCTの扱いが間違っているのでしょうけど、

原因はわかりません。

目を通していただきありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました