mfc 动态创建CTreeCtrl 的点击事件
时间: 2023-09-27 16:08:29 浏览: 254
MFC 动态创建
4星 · 用户满意度95%
首先,在动态创建的 CTreeCtrl 对象的 Create 函数中添加以下代码,以便在单击某个树节点时调用自定义的响应函数:
```c++
m_TreeCtrl.ModifyStyle(0, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);
m_TreeCtrl.SetExtendedStyle(TVS_EX_DOUBLEBUFFER, TVS_EX_DOUBLEBUFFER);
m_TreeCtrl.SetItemHeight(20); // 设置每个节点的高度
m_TreeCtrl.EnableToolTips(TRUE); // 开启节点提示
// 绑定单击事件响应函数
m_TreeCtrl.m_hWnd = this->GetSafeHwnd(); // 将当前窗口的句柄赋给 CTreeCtrl 对象的句柄
m_TreeCtrl.m_pfnSuperWindowProc = ::DefWindowProc;
m_TreeCtrl.m_pfnOldTreeCtrlProc = (WNDPROC)::SetWindowLong(m_TreeCtrl.m_hWnd, GWL_WNDPROC, (LONG)TreeCtrlProc);
```
然后,实现 TreeCtrlProc 函数来处理单击事件:
```c++
LRESULT CALLBACK TreeCtrlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CTreeCtrl* pTreeCtrl = (CTreeCtrl*)CWnd::FromHandle(hWnd);
if (pTreeCtrl == NULL)
{
return 0;
}
// 处理单击事件
if (uMsg == WM_LBUTTONDOWN)
{
HTREEITEM hSelectedItem = pTreeCtrl->GetSelectedItem();
if (hSelectedItem != NULL)
{
CString strItemText = pTreeCtrl->GetItemText(hSelectedItem);
// 在此处添加您的响应代码
}
}
// 调用默认的窗口处理函数
return ::CallWindowProc(pTreeCtrl->m_pfnOldTreeCtrlProc, hWnd, uMsg, wParam, lParam);
}
```
这样,当用户单击 CTreeCtrl 对象中的任何一个节点时,就会触发单击事件,您可以在事件响应函数中添加自己的响应代码来处理单击事件。
阅读全文