1. Abstract
如何禁止WTL CTabView中Tab的Dragging行為?
2. Introduction
因在專案中使用Tab的功能去進行頁面的分類,但是卻又不希望使用者改變Tab的順序。經過對 CTabViewImpl 這個Class的Trace之後發現 CTabViewImpl將Dragging行為的處理分配在 dwMsgMapId == 1的這個 Message Map分流中,所以只要Pending掉這個 MessageMap就可以達到我們要的功能了。
相關做法如下:
Step 1:
先繼承 CTabViewImpl 。
(class CCustomTabView : public CTabViewImpl<CCustomTabView> ….. )
Step 2:
依照WTL編寫慣例加上 BEGIN_MSG_MAP(CCustomTabView) 與 END_MSG_MAP() 的 Macros.
Step 3:
在CCustomTabView的Message Map Macros 中加入 CHAIN_MSG_MAP(CTabViewImpl<CCustomTabView>) 與 ALT_MSG_MAP(1) 這樣就可以完成我們所需要的功能了。
Sample:
1 class CCustomTabView : public CTabViewImpl<CCustomTabView>
2 {
3 public:
4 DECLARE_WND_CLASS_EX(_T("CCustomTabView"), 0, COLOR_APPWORKSPACE)
5
6 BEGIN_MSG_MAP(CCustomTabView)
7 CHAIN_MSG_MAP(CTabViewImpl<CCustomTabView>) //粉重要讓dwMsgMapID == 0的消息分流可以繼續處理
8 ALT_MSG_MAP(1) //Disable Draging
9 END_MSG_MAP()
10
11 ---- 略 ----
12 };
13
2 {
3 public:
4 DECLARE_WND_CLASS_EX(_T("CCustomTabView"), 0, COLOR_APPWORKSPACE)
5
6 BEGIN_MSG_MAP(CCustomTabView)
7 CHAIN_MSG_MAP(CTabViewImpl<CCustomTabView>) //粉重要讓dwMsgMapID == 0的消息分流可以繼續處理
8 ALT_MSG_MAP(1) //Disable Draging
9 END_MSG_MAP()
10
11 ---- 略 ----
12 };
13
3. Conclusion
未來可以在 dwMsgMapID == 1這個分流上實作 Switch的方式來 Enable/Disable Dragging行為。
4. Reference
NULL