ツリービューコントロールのどのリーフがアクティブなのかを知りたい – プログラミング – Home

ツリービューコントロールのどのリーフが...
 
通知
すべてクリア

[解決済] ツリービューコントロールのどのリーフがアクティブなのかを知りたい


熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

VC++ 6.0 XP
ツリーコントロールをダイアログに貼り付けて表示しています。
実行させて、アイテムをクリックすると、その文字は、反転し、アクティブになってい
るようになるのですが、プログラムのほうで、このどのアイテムがクリックされたの
か、知る方法がわかりません。ご存知の方よろしくおねがいします。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

MFC を使っているかどうかは必ず書いてくださいな。

使っているなら CTreeCtrl::GetSelectedItem、使っていないなら
TreeView_GetSelection でいかがでしょ。

選択されたタイミングを知りたいなら、TVN_SELCHANGED をハンドリングします。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

aetosさんレスありがとうございます。
MFCを使用しています。
アイテムをクリックしたタイミングでメッセージが発生しることは、ないのでしょう
か?クリックしたタイミングで処理をおこないたいのですが。
(できれば、そのメッセージのパラメータにどのアイテムがクリックされたかの情報が
のっていると都合がいいのですが。)
例えば、エクスプローラでは、フォルダーをクリックしたタイミングで、メインのビュ
ーにそのフォルダーの内容が表示されるような処理をおこないたいと思うのです。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

既にaetosさんから
>選択されたタイミングを知りたいなら、TVN_SELCHANGED をハンドリングします。
と回答がありますが、VC++6を使用されているようなのでView側に
ClassWizardでメッセージを探してハンドラを作ることになるんじゃないでしょうか。

別の方法としてはメインフレーム側でOnWndMsgかWindowProcを
オーバライドすればWM_NOTIFYのメッセージでTVN_SELCHANGEDが拾えると思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

MSDNを活用される事をお勧めします。

キーワードでCTreeCtrlと入れれば、
下のリストボックスにCTreeCtrl の通知メッセージという項目があるはずです。
ここから通知メッセージの一覧が見れます。
一覧で各通知メッセージの意味の説明もありますからここで
メッセージに目星をつけます。

次に目星を付けたメッセージこの場合は、TVN_SELCHANGEDをキーワードに
入れるとリストボックスにTVN_SELCHANGEDが出てきますから
ここでリストボックス上のTVN_SELCHANGEDをダブルクリックします。
該当するトピックがリスト表示されますから
この中のShell Command Controlを選択して内容を表示させます。

英語表記ですが、プログラミングの資料で英語表記の資料は極当たり前に
出てきます。英語の辞書を使ってでも読むくらいの事は必要です。
但し、意味がわかれば良いだけなので翻訳する必要は有りません。
よく英語だから読めないと言う方がいらっしゃいますが、
翻訳家が翻訳したような文章を目指すから挫折するわけで
要は片言だろうが意味がわかれば良いわけなので、読んでみる努力をするべきです。
この手の文章は文法的に難しい言い回しを使っている事は殆ど有りません。
平易に単語の意味を引いて行けば意味はわかると思いますよ。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ここで言っているMSDNはVC++6.0についてきたHELPの事を言っています。
オンラインのMSDNでも検索は可能ですが、上記の操作はローカルのHELPを
想定しているので少し違っていると思います。

いずれにしてもこの辺は調べる為の肝を身につけていかないと
なかなか自分で解決できないので効率が悪いです。
始めはうまく行かなくてもチャレンジしてみる事をお勧めします。

あと、質問時にこう言う調べ方をしたけど分からなかった等を
書いていると調べ方に関してのアドバイスを得られるかもしれません。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

aetosさん、subaru さん、PATIOさん、レスありがとうございます。
①クラスウイザードでツリービューを貼り付けた、ダイアログクラスのTVN_SELCHANGED
メッセージに対してメソッドを実装する。デフォルトでOnSelchanged○○○と作られま
した。 aetosさんの言って下さったTVN_SELCHANGEDをハンドリングするとは、このこと
だと思います。

②実装の内容は、以下の通りです。
void CxxxDialog::OnSelchanged○○○(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してくださ

char buff[256];

TVITEM wTvitem ;
wTvitem.hItem = m_wndTree1.GetSelectedItem() ;//セレクトされたアイテム
wTvitem.mask = TVIF_TEXT ;
wTvitem.pszText = buff ;
wTvitem.cchTextMax = 255;

m_wndTree1.GetItem(&wTvitem) ;

CString msg ;
msg.Format(buff) ;
AfxMessageBox(buff) ;

*pResult = 0;
}

GetSelectedItem()でセレクトされた、アイテムの内容をどうやって見るのか、なかなか
わかりませんでした。結局、GetItem()に、GetSelectedItem()の返り値を渡すことに気
がついてなんとかできました。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

そんなことをせずとも、pNMTreeView にアイテム情報が入ってます。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

PATIOさんのアドバイスどおり、TVN_SELCHANGEDのヘルプを見て、英語の内容をみ
てみましたが、これでは、コーディング結果には、なかなか結びつかないように思いま
すが、「なれ」もあると思いますので、これからすこしづつ、やっていきたいと思いま
す。ありがとうございました。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

あ、ダイアログって書いてあった。
前回の続きでドキュメントビューかと思って書き込んでしまった(^^ゞ


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

aetos さん、レスありがとうございます。GetSelectedItem()は、いらないみたいです
ね。GetItemは、必要みたいです。

char buff[256];

TVITEM wTvitem ;
//(削除)wTvitem.hItem = m_wndTree1.GetSelectedItem() ;
wTvitem.hItem = pNMTreeView->itemNew.hItem ;//セレクトされたアイテム
wTvitem.mask = TVIF_TEXT ;
wTvitem.pszText = buff ;
wTvitem.cchTextMax = 255;

m_wndTree1.GetItem(&wTvitem) ;

AfxMessageBox(buff) ;


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> GetItemは、必要みたいです。
というか、設定されている文字列が欲しいんだったら、
CString str_ = wndTree1.GetItemText(pNMTreeView->itemNew.hItem);
で一発じゃん。VC6では使えないんだっけ?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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