更新UI對象

  1. /*
  2.     更新UI對象
  3.     常規情況下,菜單和工具欄按鈕可以有多種狀態。例如,菜單不可用時可以置灰,菜單
  4.     正在被使用時可以設定爲選中狀態。同樣工具欄也有這些狀態。
  5.     誰來更新這些可變狀態項的狀態?從邏輯上講,如果一個菜單項產生了一個命令消息,
  6.     此消息會被文檔處理,那麼由文檔去更新可變狀態項的狀態更有意義,文檔中應該包括
  7.     可變狀態項的狀態信息。
  8.     如果一個命令對應多個UI對象,比如一個菜單項和一個工具欄項,那麼這兩處的發出的
  9.     命令將會被路由到同一個處理函數。這樣就會在一處爲多個同等的UI對象封裝一份
  10.     UI更新代碼。
  11.     編程框架提供了一個自動更新UI對象的快捷方法,你可以選擇自己的更新方法,但框架
  12.     提供的方法更有效且易於使用。
  13.     1:更新函數何時被調用?
  14.     假設用戶通過鼠標點擊了“文件”菜單,此操作會產生WM_INITMENUPOPUP消息,在菜單
  15.     彈出之前,編程框架的更新機制會更新“文件”菜單下的所有菜單項,這樣我們就可以
  16.     看到各個菜單項的狀態了。
  17.     爲了做到這一點,編程框架會以標準的命令路由方式路由彈出菜單的所有菜單項命令。
  18.     在路由的過程中,通過檢查消息映射入口,命令目標有機會更新任意的菜單項及調用
  19.     更新函數。比如,一個菜單有六個菜單項,那個彈出之前,這六個更新命令都會被髮送
  20.     出去。如果存在與其相關的更新函數,則其會被更新狀態。如果沒有,編程框架會檢查
  21.     與命令ID相關的處理函數是否存在,並依據其更新菜單項的狀態。
  22.     如果在命令路由的過程中找不到相應的狀態更新項,編程框架會自動去檢查針對此命令
  23.     ID的響應函數是否存在,如果存在則UI對象可用,如果不存在則不可用。
  24.     所以,爲了使一個UI對象可用,可以爲其提供一個命令響應函數或者一個UI對象更新
  25.     函數。二者存在一個即可。
  26.     禁用UI對象的默認不可用屬性是可以做到的,具體可以參照CFrameWnd的成員變量
  27.     m_bAutoMenuEnable。
  28.     編程框架中的菜單初始化是自動完成的,它發生在程序接收到消息WM_INITMENUPOPUP
  29.     的時候。在IDLE時間內,編程框架會像查找菜單的更新函數一樣爲按鈕也查找更新函數。
  30.     2:宏ON_UPDATE_COMMAND_UI
  31.     通過屬性窗口可以自動地將UI對象的ID與其相應的更新函數聯繫起來。UI對象的更新
  32.     函數的原型如下:
  33. */
  34. /*
  35.     像所有的消息處理函數一樣,更新函數的聲明需要關鍵字afx_msg的支持
  36.     所像所有的更新函數一樣,它也需要一個參數,類型爲CCmdUI*
  37. */
  38. afx_msg void OnUpdateEditClearAll(CCmdUI *pCmdUI);
  39. /*
  40.     3:類CCmdUI
  41.     在路由更新命令的過程中,編程框架會爲更新函數提供一個CCmdUI*類型的參數,它代表
  42.     了產生更新命令的UI對象。更新函數會調用CCmdUI的成員函數去更新其代表的UI對象。
  43.     示例代碼如下:
  44. */
  45. void CMyWinApp::OnUpdateEditClearAll(CCmdUI *pCmdUI)
  46. {
  47.     pCmdUI->Enable(m_bClearAllAvailable);
  48. }
  49. /*
  50.     CCmdUI的成員函數可操作的UI對象包括:
  51.     Menu item,菜單項
  52.             Enables or disables
  53.             Checks (×) or unchecks
  54.             Checks using dot (•)
  55.             Sets item text
  56.     Toolbar button,工具欄項
  57.             Enables or disables
  58.             Selects, unselects, or indeterminate
  59.             Same as SetCheck
  60.     Status-bar pane,狀態欄項
  61.             Makes text visible or invisible
  62.             Sets pop-out or normal border
  63.             Same as SetCheck
  64.             Sets pane text
  65.     Normal button in CDialogBar
  66.             Enables or disables
  67.             Checks or unchecks check box
  68.             Same as SetCheck
  69.             Sets button text
  70.     Normal control in CDialogBar
  71.             Enables or disables
  72.             Sets window text
  73.     成員函數有下面的五人:
  74.         ContinueRouting
  75.         Enable
  76.         SetCheck
  77.         SetRadio
  78.         SetText
  79. */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章