簡體   English   中英

CStatic子類別的Control無法接收輸入消息

[英]CStatic subclassed Control fails to receive input messages

我正在使用基於MFC對話框的應用程序,並且具有子類的CStatic控件。 我想在我的子類控件中接收WM_MOUSEWHEEL和其他消息,但是以某種方式這些消息永遠不會到達。

這是我的對話框的樣子:

在此處輸入圖片說明

我只在做一些非常簡單的繪圖,並且希望能夠通過滾動來上下移動列表。

我已經做了:

  • 更改Tab順序以確保首先關注子類CStatic控件
  • 重寫OnNcHitTest始終將焦點放在子類CStatic上
  • 在側面添加了滾動條
  • 為WM_MOUSEWHEEL,WM_LBUTTONDOWN,WM_KEYDOWN和WM_VSCROLL編寫消息處理程序
  • 嘗試在PreTranslateMessage捕獲消息

可悲的是,當我在對話框中滾動/按一個鍵或用鼠標單擊時,什么也沒有被調用。 消息只是沒有到達。

例如,這是我的Mousewheel處理程序:

class CFolderView : public CStatic
{
   ...
   afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
   DECLARE_MESSAGE_MAP()
   ...
}

BEGIN_MESSAGE_MAP(CFolderView, CStatic)
    ON_WM_MOUSEWHEEL()
    ON_WM_KEYDOWN()
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

BOOL CFolderView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
    MessageBox("Mouse Wheel moved!", "Debug", MB_OK);

    return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}

我不明白為什么沒有輸入消息被發送到我的子類控件。 是否有一些開關可以啟用子類控件的輸入?

您無法在CStatic處理WM_MOUSEWHEEL ,因為它無法通過設計獲得焦點。

從MSDN:

旋轉鼠標滾輪時,WM_MOUSEWHEEL消息將發送到焦點窗口

通過查看您的屏幕截圖,我建議改為CListBox

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM