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的點選事件
相關文章
- MFC DLL如何響應PreTranslateMessage訊息
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- 由自定義事件到vue資料響應事件Vue
- 資料洩露後,攻擊者是如何應對事件響應的?事件
- lakeFS:實現類似於Git或事件溯源ES的物件儲存功能Git事件物件
- 同一個元素的單擊事件與雙擊事件事件
- 雙擊事件(dblclick)時,不觸發單擊事件(click)事件
- 理解響應者和響應鏈如何處理事件事件
- Flutter:如何響應觸控事件Flutter事件
- Flutter:如何響應互動事件?Flutter事件
- cc.Node事件響應事件
- Matlab 實現介面相應滑鼠事件Matlab事件
- 網路安全事件應急響應事件
- UIDatePicker事件不響應問題UI事件
- Java進階09 事件響應Java事件
- 事件傳遞和響應鏈事件
- Flutter事件響應原始碼分析Flutter事件原始碼
- win10滑鼠單擊變雙擊如何解決_win10系統滑鼠單擊變雙擊的解決方法Win10
- 可觀察性在事件響應中的作用事件
- 最具影響力的汽車駭客攻擊事件事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- .NET Core授權失敗如何自定義響應資訊?
- 記一次安全應急響應事件事件
- SolarWinds供應鏈攻擊事件分析事件
- iOS GestureRecognizer與UIResponder touch事件響應iOSUI事件
- C#事件及響應方法概述C#事件
- 如何實現swipe、tap、longTap等自定義事件事件
- Flutter 使用者互動事件的響應Flutter事件
- SpringBoot+WebFlux透過流式響應實現類似ChatGPT的打字機效果Spring BootWebUXChatGPT
- 類比分析|新冠疫情危機處置VS資訊保安事件響應事件
- 自定義響應資料結構資料結構
- UIResponder事件響應鏈學習筆記UI事件筆記
- 事件傳遞和響應者鏈條事件
- Java進階學習之事件響應Java事件
- 勒索病毒攻擊事件頻發,企業上雲應如何應對事件
- 記一次挖礦病毒應急響應事件事件