WinApiを使用してツリービューコントロールを作成しました。私はチェックボックスでマウスクリックをキャプチャしたい。通知メッセージNM_CLICKには、クリックされたノードに関する情報を持たないNMHDRが含まれています。クリックされたノードは選択されたノードと異なる可能性があるため、ツリービューに項目を追加するときに、どのノードがチェックされているかチェックされていないかを見つける方法があります。私は、チェック/チェック解除をリアルタイムでキャプチャしたい。どのノードをチェック/チェック解除しないかを指定するにはどうすればよいですか?任意のヘルプやリンクをいただければ幸いです。 mr.abzadehクリックしたツリービューノードをキャプチャする方法
答えて
クライアントの相対的な座標で、ツリービュー項目を見つけるには、TVM_HITTESTメッセージ(またはTreeView_HitTestマクロを使用)を送信できます。
NM_CLICK
メッセージが生成された時点でカーソル位置を取得するには、GetMessagePos APIを使用します。
これにより、コントロールのクライアント領域でのマウスクリックを監視できます。標準的なツリービューコントロール実装の結果として状態の変更に関心がある場合は、代わりにTVN_ITEMCHANGINGまたはTVN_ITEMCHANGEDの通知を処理できます。どちらもNMTVITEMCHANGE構造体を提供します。hItem
は変更される項目を示し、lParam
はアプリケーション固有のデータを示します。
リアルタイムでチェック/アンカを取りたいと思っています。 どのノードをチェックする/しないを指定できますか?
NMTVITEMCHANGE
のuStateNew
とuStateOld
メンバーを探してください - - ツリービューは、チェックボックス(TVS_CHECKBOXES
スタイル)を持っている場合、それは2枚の画像で状態イメージリストとして使用 -unchecked
とchecked
これが存在通知TVN_ITEMCHANGINGとTVN_ITEMCHANGEDため
。
だから、はチェックボックスなしの場合INDEXTOSTATEIMAGEMASK(1)
、チェックの場合はINDEXTOSTATEIMAGEMASK(2)
となります。この情報に基づいて、
TVN_ITEMCHANGINGを使用してこの通知にTRUEを返すと、マウスのクリックをキャプチャしてキャプチャすることができます。あなたが必要な場合にのみ通知 - 使用TVN_ITEMCHANGED
case WM_NOTIFY:
{
union {
LPARAM lp;
NMTVITEMCHANGE *pnm;
NMHDR* phdr;
};
lp = lParam;
switch (phdr->code)
{
case TVN_ITEMCHANGING:
{
UINT CheckStateOld = pnm->uStateOld & TVIS_STATEIMAGEMASK;
UINT CheckStateNew = pnm->uStateNew & TVIS_STATEIMAGEMASK;
if (CheckStateNew != CheckStateOld)
{
PCSTR szstate = "??";
switch (CheckStateNew)
{
case INDEXTOSTATEIMAGEMASK(1):
szstate = "uncheck";
break;
case INDEXTOSTATEIMAGEMASK(2):
szstate = "check";
break;
}
DbgPrint("%p>%s\n", pnm->lParam, szstate);
}
}
return FALSE;
}
}
も読んHow to Work With State Image Indexes
// Image 1 in the tree-view check box image list is the unchecked box. // Image 2 is the checked box. tvItem.state = INDEXTOSTATEIMAGEMASK((fCheck ? 2 : 1));
通知TVN_ITEMCHANGINGとTVN_ITEMCHANGEDは、Windows Vistaから始める可能です。 XPのサポートが必要な場合 - xnsのみオプションで@@nspectableを使用するsolution
TVN_ITEMCHANGINGはVista以降で利用できます。そうでない場合は、OPはhittestingを使用する必要があります。 – AlwaysLearningNewStuff
@AlwaysLearningNewStuffはい..、これが欠けています。私の間違い – RbMm
間違いなく、言及するだけ重要なこと。私はあなたの答えをupvotedしています。 – AlwaysLearningNewStuff
- 1. .NETツリービューノードを展開する方法+/-
- 2. jqueryを使用してクリックした子リンクをキャプチャする方法は?
- 3. 地図をクリックして場所をキャプチャする方法は?
- 4. キャストコントロールインターフェイスを使用してUIMediaControllerのクリックをキャプチャする方法
- 5. playnを使用してimagelayerクリックをキャプチャする方法は?
- 6. ツールチップバルーンのtrayicon.displayMessage()マウスをクリックしてキャプチャする方法
- 7. UWPのListViewでクリックをキャプチャする方法は?
- 8. ツリービューノードでjavascriptを接続する方法は?
- 9. ボタンをクリックしてスクロールをキャプチャする
- 10. コード化されたUIで右クリックのコンテキストメニューをキャプチャする方法
- 11. ツリービューノードをコピー
- 12. HTML DIVを右クリックしてキャプチャする
- 13. リアルタイムデータをキャプチャする方法
- 14. パケットをキャプチャする方法
- 15. メタタグをキャプチャする方法
- 16. ツリービューノードのバインドグリッドクリック
- 17. Template10で無視したボタン内のボタンのクリックをキャプチャするボタンを無視する方法は?
- 18. どのタグリストボタンをクリックしたのかをキャプチャする方法はありますか?
- 19. 閲覧したURLをキャプチャする方法は?
- 20. NiFi - ConvertCSVtoAVRO - 失敗したレコードをキャプチャする方法は?
- 21. ListViewでキャプチャした画像を設定する方法は?
- 22. キャプチャした画像のURLを取得する方法は?
- 23. X11でマウスのクリックをすべてグローバルにキャプチャする方法は?
- 24. キャプチャTreeViewをクリックする項目
- 25. データグリッドセルのヘッダをキャプチャするクリック
- 26. XMLノードをツリービューノードにバインドする
- 27. 他のフォームにツリービューノードをコピーする
- 28. VB.NETでネストされたツリービューノードを追加しますか?
- 29. タスクバーのクリック時に非表示/復元イベントをキャプチャする方法
- 30. ツリービューノードのテキストを整列
OPの質問には悪いとは効果的ではない - 「どのノードをチェック/チェックしないのかを指定するにはどうすればよいですか? – RbMm
あなたは** TVN_ITEMCHANGINGと** TVN_ITEMCHANGED通知についての情報を**追加しました。**これを使って私自身の答えを書きました。これは編集履歴で見ることができます。これはちょっといいじゃないですか? – RbMm
@RbMm:あなたがまだ理解していないので、この場所の仕組みは、[ツアー]に行き、[ヘルプ]をご覧ください。フィードバックからの提案を組み込むことは**正しいことです**。 – IInspectable