ツリーコントロールのチェックボックス設定について – プログラミング – Home

ツリーコントロールのチェックボックス設...
 
通知
すべてクリア

[解決済] ツリーコントロールのチェックボックス設定について


まさる
 まさる
(@まさる)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

ツリーコントロール上のチェックボックスをクリックした場合に、
下記関数がコールされるようにメッセージマップを割り当てております。

void CTestDlg::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
NMTREEVIEW* pNMTree = (NMTREEVIEW*)pNMHDR;
TVHITTESTINFO stHitTest = {0};

// CListはCTreeCtrlを継承したサブクラス
CList* pList = (CList*)GetDlgItem(IDC_TREE_LIST);

// クリックされた位置の取得
stHitTest.pt = pNMTree->ptDrag;
HTREEITEM hCheckItem = pList->HitTest(&stHitTest);

// チェックボックスが設定された場合
if (stHitTest.flags & TVHT_ONITEMSTATEICON)
{
// hogehoge・・・・・・・・・・・・・・・・・①
}

*pResult = 0;
}

2つ以上のアイテムをツリーコントロールに追加し、チェックボックスをクリックする
と、
現在選択中のアイテムのチェックボックスをクリックした場合は、上記①に引っかかりま
すが、
非選択中のアイテムのチェックボックスをクリックした場合は、
「stHitTest.flags」が(TVHT_BELOW| TVHT_TORIGHT)の値になり、上記①に引っかかりま
せん。
この時、「stHitTest.pt」のx、yの値がとんでもない値になります。
(どのアイテムのチェックボックスをクリックしても、一律x:0x0012f660、y:
0x5abb940dになります。)
非選択中のアイテムのチェックボックスをクリックしても①に引っかかるようにしたいの
ですが、
上記関数のどこに問題がありますでしょうか?
ご教授願います。


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

OnClick で渡される NMHDR* を NMTREEVIEW* にキャストしてはなりません。
この場合、NMTREEVIEW にあって NMHDR にないメンバには何がはいっているかわかりませ
ん。
GetCursorPos でカーソル位置を取得する必要があるでしょう。
クライアント座標に変換するのをお忘れなく。


返信引用
まさる
 まさる
(@まさる)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

回答ありがとうございました。
GetCursorPosを使用してクライアント座標に変換することで解決できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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