まず、親ウィンドウでWM_NOTIFYを捕まえる。
WM_NOTIFYでTreeViewのイベントが送られてくるのでこれを処理する。
このときLPARAMにはNMTREEVIEW構造体のアドレスが入っている。
LPNMTREEVIEW lpnmtview = (LPNMTREEVIEW)lp;
if(lpnmtview->hdr.idFrom != IDC_CONFIG_TREE) return;
switch(lpnmtview->hdr.code){
case NM_CLICK: //ツリーアイテムクリック時
break;
case TVN_SELCHANGED: //ツリーアイテム選択変更時
break;
}
このように
lpnmtview->hdr.idFromにツリービューのIDが、
lpnmtview->hdr.codeのイベントのIDが入っている。
クリックイベント時にはまだ、アイテムは選択されていないので、
NM_CLICKを捕まえて、選択アイテムを取得するというやり方では上手くいかない。
なので、TVN_SELCHANGED時に、選択アイテムを取得するという方法で行います。
このとき、送られてくる、NMTREEVIEW構造体に選択されているTVITEMが入ってるが、
このTVITEMのラベル名は正しく格納されていないので自分で取得する必要がある。
コード例は以下のようになる。
LPNMTREEVIEW lpnmtview = (LPNMTREEVIEW)lp;
if …
Continue reading