MFC vc++ 中CTreeContrl如何自定義實現滑鼠單擊或雙擊響應事件 ,即重寫類似於控制元件的響應事件或訊息
程式碼部分摘錄自“天上的猩猩的專欄”:https://blog.csdn.net/qq_23992597/article/details/51006920#commentsedit
目的:自定義修改mfc視窗的FileView中已有的樹結構,而不是新增的樹控制元件
實現的效果如圖:點選“地圖”後彈出框提示,點選響應效果與控制元件的響應事件類似
首先需要重寫CtreeContrl:
① 在CViewTree類的.h標頭檔案中新增程式碼:
afx_msg void OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult);//雙擊事件
afx_msg void OnClkTree(NMHDR* pNMHDR, LRESULT* pResult);//單擊事件
② 新增後的.h檔案如下:
#pragma once
/////////////////////////////////////////////////////////////////////////////
// CViewTree 視窗
class CViewTree : public CTreeCtrl
{
// 構造
public:
CViewTree();
// 重寫
protected:
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
// 實現
public:
virtual ~CViewTree();
afx_msg void OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnClkTree(NMHDR* pNMHDR, LRESULT* pResult);
protected:
DECLARE_MESSAGE_MAP()
};
③ CViewTree類的cpp原始檔中實現該事件,程式碼如下:
#include "stdafx.h"
#include "ViewTree.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewTree
CViewTree::CViewTree()
{
}
CViewTree::~CViewTree()
{
}
BEGIN_MESSAGE_MAP(CViewTree, CTreeCtrl)
ON_NOTIFY_REFLECT(NM_DBLCLK, &CViewTree::OnDblClkTree)
ON_NOTIFY_REFLECT(NM_CLICK, &CViewTree::OnClkTree)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CViewTree 訊息處理程式
BOOL CViewTree::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
BOOL bRes = CTreeCtrl::OnNotify(wParam, lParam, pResult);
NMHDR* pNMHDR = (NMHDR*)lParam;
ASSERT(pNMHDR != NULL);
if (pNMHDR && pNMHDR->code == TTN_SHOW && GetToolTips() != NULL)
{
GetToolTips()->SetWindowPos(&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE);
}
return bRes;
}
void CViewTree::OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hTreeItem = GetSelectedItem();
//以GetItemText()函式為例:
CString S1 = GetItemText(hTreeItem);
AfxMessageBox("You have selected "+S1);
*pResult = 0;
}
void CViewTree::OnClkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hTreeItem = GetSelectedItem();
//以GetItemText()函式為例:
CString S1 = GetItemText(hTreeItem);
AfxMessageBox("You have selected "+S1);
*pResult = 0;
}
注意:新增的位置要正確。
以上即可實現CtreeContrl的點選事件
相關文章
- [VC] 滑鼠事件的響應事件
- ALV中滑鼠雙擊事件事件
- MFC對話方塊新增選單欄並新增滑鼠單擊響應
- 實現Android監控任意控制元件或按鍵雙擊事件方法Android控制元件事件
- 【譯】如何自定義Flask中的響應類Flask
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- jQuery滑鼠雙擊事件簡單介紹jQuery事件
- 資料洩露後,攻擊者是如何應對事件響應的?事件
- 由自定義事件到vue資料響應事件Vue
- 深入解析MFC訊息響應和訊息路由路由
- js中的事件響應JS事件
- 同一個元素的單擊事件與雙擊事件事件
- MFC訊息響應機制分析 (轉)
- lakeFS:實現類似於Git或事件溯源ES的物件儲存功能Git事件物件
- VC自定義訊息postmessage用法(訊息響應函式)函式
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- MFC框架中WM_COMMAND訊息響應順序框架
- 理解響應者和響應鏈如何處理事件事件
- Flutter:如何響應觸控事件Flutter事件
- Flutter:如何響應互動事件?Flutter事件
- MFC 對話方塊中動態建立N級選單以及響應事件事件
- onDblClick雙擊事件事件
- 回車響應事件事件
- 手持裝置點選響應速度,滑鼠事件與touch事件的那些事事件
- angularjs中響應回車事件AngularJS事件
- 雙擊和單擊事件衝突解決方法事件
- Jquery中為後生成或插入的Html元素先設定響應事件處理方法jQueryHTML事件
- 滑鼠單擊變雙擊怎麼辦 滑鼠單擊變成雙擊的解決辦法
- cc.Node事件響應事件
- Android雙擊以及多擊事件Android事件
- android處理單擊雙擊和滑動事件Android事件
- 可觀察性在事件響應中的作用事件
- Qt Creator中滑鼠鍵盤事件的處理實現自定義滑鼠指標QT事件指標
- win10滑鼠單擊變雙擊如何解決_win10系統滑鼠單擊變雙擊的解決方法Win10
- js實現的按鈕響應點選回車事件JS事件
- UITextView: 響應鍵盤的 return 事件UITextView事件
- Java進階09 事件響應Java事件
- 事件傳遞和響應鏈事件