【发布时间】:2015-12-01 22:49:15
【问题描述】:
如何处理在 MS Windows 树视图中单击的单个项目?
我的 windows proc 有:
LRESULT CALLBACK WndProcTreeView(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT paintStruct;
HDC hDC;
switch (message)
{
case WM_PAINT:
{
hDC = BeginPaint(hwnd, &paintStruct);
EndPaint(hwnd, &paintStruct);
break;
}
case WM_NOTIFY:
{
switch (reinterpret_cast<LPNMHDR>(lParam)->code) {
case NM_CLICK:
MessageBox(nullptr, "click", "click", MB_OK);
}
}
default:
{
return DefWindowProc(hwnd, message, wParam, lParam);
break;
}
}
当我单击树视图控件时会输出一个消息框。如何处理单个元素?
将树视图项添加到列表的示例:
std::string vTxt = std::string("Vertex count : ") + std::to_string(mesh.v.size());
tvinsert.hInsertAfter = mesh_items[mesh_items.size() - 1];
tvinsert.hParent = mesh_items[mesh_items.size() - 1];
tvinsert.item.mask = TVIF_TEXT;
tvinsert.item.pszText = (LPSTR)vTxt.c_str();
mesh_items_sub.push_back((HTREEITEM)SendMessage(hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvinsert));
我已经看到使用 SendDlgItemMessage 代替(它在 windows proc 中提供了一个 ID 为 LOWORD(wParam)),但它需要在资源文件中设置 ID - 我不知道如何创建。
【问题讨论】:
-
我刚刚解决了我的问题(确实使用了
TVN_SELCHANGED),但真正的问题是我为我的每个项目设置了tvinsert.item.mask = TVIF_TEXT;,这会阻止任何lparam代码传递给window proc ...愚蠢的meh...:|
标签: windows c++11 winapi treeview