請問,CtreeCtrl 控制元件, 隱藏滾動條后,如何實作滑鼠中輪滾動功能,多謝!
一、將控制元件屬性 Scroll 設為 False后,怎么搞都移動不了控制元件節點
二、將控制元件屬性 Scroll 設為 True,函式 m_tree.EnableScrollBarCtrl(1, FALSE); //隱藏掉滾動條
可以隱藏掉滾動條,但是 滑鼠放在 控制元件區域, 滾動中輪,無法觸發 對話框 OnMouseWheel 訊息。
uj5u.com熱心網友回復:
"滑鼠放在 控制元件區域" 哪里?uj5u.com熱心網友回復:
SPY++ 查看是否有 WM_MOUSEWHEEL 訊息產生?控制元件是否有獲得焦點?
uj5u.com熱心網友回復:
可能要 自繪 才行uj5u.com熱心網友回復:
有獲得焦點(節點文字變色了)。
這控制元件上,轉動中輪,SPY++監視提示 “WM_KICKIDLE”

uj5u.com熱心網友回復:
BOOL cTree::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){
// TODO: Add your message handler code here and/or call default
CRect rcClient;
GetClientRect(rcClient);
int hei=GetItemHeight();
hei /=zDelta/WHEEL_DELTA;
CRect scrollRect(0, hei, rcClient.right, rcClient.bottom);
ScrollWindowEx(0, hei, &scrollRect, &scrollRect, 0, 0, SW_INVALIDATE);
return TRUE;
} 你還需要 重繪 一行
uj5u.com熱心網友回復:
CTreeCtrl::SelectSetFirstVisibleuj5u.com熱心網友回復:
BOOL cTree::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){
// TODO: Add your message handler code here and/or call default
HTREEITEM hItem=GetFirstVisibleItem();
if(zDelta >0)
hItem=GetPrevVisibleItem(hItem);
else
hItem=GetNextVisibleItem(hItem);
SelectSetFirstVisible(hItem);
return TRUE;
uj5u.com熱心網友回復:
謝謝 schlafenhamster 的耐心指導。本人不熟MFC,在做個小工具,現學現用,回復的內容沒看明白。
6樓的意思是多載 CTreeCtrl 類, 新類名字為 cTree , 新類里重寫 OnMouseWheel 函式嗎?
uj5u.com熱心網友回復:
對的很 !!!!uj5u.com熱心網友回復:
好好的滾動條不用,不別扭嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7392.html
標籤:界面
上一篇:如何學習Windows編程
