2008-10-09 137 views
0

我有一個MFC sdi應用程序,它使用分隔窗口在顯示數據的主視圖旁邊包含樹控件。防止視圖偷取焦點/設置焦點到視圖

當用戶選擇樹中的某些內容時,該視圖會保持焦點,直到用戶故意單擊主數據窗口爲止。這意味着與主視圖關聯的任何工具欄按鈕都被禁用。

有沒有什麼辦法在用戶點擊樹形控件後以編程方式將焦點切換回主視圖?或者我正在使用CSplitterWnd和2個視圖做一些根本性錯誤?

回答

1

只要有人點擊樹,您不想讓焦點回到其他視圖:它會讓您的應用程序無法使用。例如它會阻止用戶使用鍵盤在樹中導航,因爲樹永遠不會保持焦點足夠長。

我真的想讓工具欄繼續反映第二個視圖的狀態(我不確定這是個好主意),但您有幾個選項。做你的選擇。 2想到:

  1. 你的樹視圖不應該是一個CView。使用一個簡單的CTreeCtrl。不是很好,因爲它有時會打破文檔/視圖範例(例如,只要調用UpdateAllViews(),就不會調用更多樹的OnUpdate()。

  2. 防止樹成爲主動視圖。要做到這一點: 2.a.當您查看獲得焦點(聚焦狀態()):

STATIC_DOWNCAST(CFrameWnd的,AfxMainWnd()) - > SetActiveView(pTheOtherView);

2.b.從CSplitterWnd派生CMySplitterWnd類,然後覆蓋CMySplitterWnd :: SetActivePane(),以防止它將樹視圖設置爲活動視圖。

在所有情況下,歡迎MFC內部的奇妙世界裏,潛水到源代碼是強制性每日體育;-)

編輯:添加缺少的不是

+1

有人說 - 在MFC中的專業知識來自知道如何解決它! – 2008-10-09 18:33:33