在我的基於MFC對話框的應用程序中,有一個CListCtrl。當用戶點擊列表控件中的空項時,我需要禁用按鈕。我使用了NM_CLICK消息並實現了此功能。但是,如果用戶將鼠標拖出列表控制區域並釋放鼠標,則不起作用。我發現只有在接收到按鈕啓動消息時纔會調用NM_CLICK的原因。是否有其他解決方案。檢測單擊列表控件中的空白項目
-1
A
回答
0
我找到了問題的解決方案。如果用戶使用鼠標左鍵拖拽鼠標,即LVN_BEGINDRAG,則會出現一條消息。通過在OnBeginDrag函數中處理此消息,我更新按鈕狀態。只要用戶嘗試拖動鼠標,該按鈕就會更新。該代碼是如下: 在頭部添加
afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT *pResult);
在實施添加消息映射和相應的功能:
BEGIN_MESSAGE_MAP(..)
ON_NOTIFY(LVN_BEGINDRAG,IDC_LIST1,OnBeginDrag)
END_MESSAGE_MAP
OnBeginDrag(....)
{
Updatebutton();
}
它解決了問題。謝謝大家的支持。
0
有一些可行的選擇。 在父對話框中,MouseUp Handler函數可以用於此。
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
通過使用點,您可以檢查鼠標釋放是否發生CListCtrl。 如果是,您只需禁用該按鈕。
此外,WindowFromPoint可以是另一種選擇。
static CWnd* PASCAL WindowFromPoint(POINT point);
在諸如OnMouseMove中,如果使用此函數,則可以檢查窗口是否被鼠標指向。
0
實現一個LVN_ITEMCHANGED處理程序,並在該處理程序中一旦selected item count爲零就禁用該按鈕。
1
但是,如果用戶將鼠標拖出列表控制區域並釋放鼠標,這不起作用。
這完全是由設計,你不應該想要這些點擊「計數」。這是用戶在點擊過程中改變主意的唯一方式。它的工作原理是這樣的:
- 開始到列表框控件對象(或空白區域)上單擊
- 改變主意
- 儘管仍然按住鼠標按鈕(即提交之前你單擊),將鼠標指針拖到控件邊界之外
- Think:Whew!這是一個密切的呼叫!
你會發現,在Windows中,動作永遠不會發生,直到鼠標按鈕發佈(通常被稱爲「的MouseUp」)。如果這不被支持,那麼用戶就無法在任何用戶界面的關鍵功能之前提前撤出操作。
相關問題
- 1. 我想檢測一個項目雙擊WinForms列表框控件。 [如何處理點擊空白區域?]
- 2. 檢測列表框中的「空白」點擊
- 3. 如何檢測鼠標單擊外部列表視圖項目?
- 4. HTMLAgilityPack - 檢測空白表?
- 5. 簡單列表項檢查點擊檢查多個項目
- 6. WPF禁用或檢測CardView空白空間單擊?
- 7. 檢測鼠標單擊控件數組
- 8. C#項目不在列表中,且不爲空或空白
- 9. JQuery檢查空的列表框項目
- 10. 刪除列表框中的空白項
- 11. 如何在不影響其他列表視圖項目中的控件的情況下單擊列表視圖項目中的單個控件?
- 12. 遍歷列表並單擊Robotium中的列表項目
- 13. 檢測點擊c中的控件#
- 14. 檢測鼠標單擊列表框項目與焦點設置爲False
- 15. 如何檢測Pull To Refresh Grid View中的空白點擊?
- 16. VB.NET當在空白區域中單擊鼠標時取消選擇列表框中的項目
- 17. 檢測空白用正則表達式
- 18. Espresso - 單擊列表查看項目
- 19. 導航到單擊列表組項目
- 20. 單擊列表項目應顯示與該列表項目相關的表格
- 21. 檢測項目是否是列表中的最後一項
- 22. 從列表視圖檢索項目單擊「_ID」值
- 23. 如何在Symbian中創建檢查列表項目控件
- 24. 列表視圖控件中的項目和子項目
- 25. 檢測文本框中的空白
- 26. 檢測模板中的空表單
- 27. php空白$ _GET []檢測
- 28. 檢測空白文本框
- 29. 檢測單擊在TableViewController上的CustomCell項目的索引
- 30. 單擊空白區域
我同意你的看法,但我們正在談論編程,當然程序員不能完全預測用戶的想法。但需要一個解決方案。 – CodeRider 2013-04-05 09:24:55
這是一個標準的Windows設計實踐。您將在整個操作系統和其他兼容程序中看到它。它不需要任何介意。試圖繞過這個重要的用戶界面特性只會讓你很多憤怒的客戶,並導致很多不可維護的代碼。 – 2013-04-05 23:07:20