MFC树形控件响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC树形控件响应相关的知识,希望对你有一定的参考价值。

窗口分割后,左侧为CTreeView,右侧为CEditView,现在想单击树形控件的子节点,在右侧显示响应的图片,请各位高手帮忙解决一下,给点思路,深表感谢

参考技术A 不知道你的自定义控件是从哪个类派生的,也不知道你是否重载了虚函数WindowProc()一般来说控件自身是没有能力自己处理鼠标消息的,在重载虚函数WindowProc()函数时可以看到其直接调用的是该自定义控件的基类的WindowProc()函数,从而没有搜索当前类的消息映射表,所以我们需要改变消息路由,比如我从Static类派生了一个树形控件,这个控件我需要响应鼠标单击等事件事件这时我需要重载WindowsProc()函数
并添加
if(
message
==
WM_NCHITTEST||
message
==
WM_NCLBUTTONDBLCLK
||message==WM_NCLBUTTONDOWN||message==WM_NCRBUTTONUP)
return
::DefWindowProc(
m_hWnd,
message,
wParam,
lParam
);
return
CStatic::WindowProc(message,
wParam,
lParam);

也就是截获WN_NCHITTEST(确定光标所在窗口)消息,鼠标单击消息等;使其搜索该类的消息映射表,从而实现鼠标消息的响应。
新手上路,如有不正确之处请多多包涵。

MFC树形控件的使用(右键点击)

概述

在MFC中,会用到树形控件,这里做下记录。

右键点击

1.添加右键点击事件(NM_RCLICK)

2.获得鼠标在Client的坐标

1 CPoint point;
2 GetCursorPos(&point);//获得鼠标在屏幕上的坐标
3 ::ScreenToClient(m_trdPageTree.GetSafeHwnd(),&point);//屏幕坐标转化为客户端坐标

3.测试该坐标点是否点中树形控件节点

1 UINT uFlags;
2 uFlags = TVHT_ONITEM;
3 HTREEITEM hItem = m_trdPageTree.HitTest(point,&uFlags);

4.判断是否点中

if(hItem&&(TVHT_ONITEM & uFlags))

 

以上是关于MFC树形控件响应的主要内容,如果未能解决你的问题,请参考以下文章

MFC 树形控件CTreeCtrl类

MFC树形控件的使用(右键点击)

如何实现树形控件可编辑状态

共有21款 jQuery 树形控件开源软件,第1页

Devexpress 哪个控件可以实现下拉树形

iview-树形控件的使用(一)