<code>應用程式類型</code>
描述
<code>sdi</code>
單文本
<code>多線程sdi</code>
一程序,多視窗
<code>mdi</code>
架構内,多視窗
<code>對話</code>
基于對話框
多線程sdi建立<code>sdi</code>視窗,應用程式,都可作<code>com</code>伺服器.<code>鋼筋條</code>是<code>工具欄</code>等的<code>容器</code>.<code>指令欄</code>可把<code>視窗</code>加至工具欄中.有了<code>rebar</code>,按<code>工具欄</code>實作<code>工具條和菜單</code>.這樣,菜單也有關聯圖示.
可選視:
<code>視</code>
<code>簡單視窗</code>
處理<code>WM_PAINT</code>,直接<code>畫時</code>.
<code>表單</code>
具<code>對話框模版</code>,應用程式操作
<code>清單框</code>
可<code>加串</code>.
<code>編輯框</code>
給你編輯
<code>清單視</code>
如<code>控制台</code>
<code>樹視</code>
用于層級關系,
<code>富文本</code>
富文本
程式線程
同<code>atl</code>,有個<code>_Module</code>,為<code>CAppModule/CServerAppModule(com)</code>執行個體.應用程式具<code>1/多</code>ui線程.單<code>ui</code>調用全局<code>Run</code>.
在<code>CMessageLoop</code>内循環消息.放入<code>全局</code>消息映射組.按<code>線程</code>索引.有<code>過濾消息/處理空閑</code>,<code>界面元素</code>可有自己的<code>空閑處理</code>.将<code>自身</code>加入<code>消息循環的處理器數組</code>中即可.<code>Run</code>包含<code>主消息映射</code>:
多界面線程,則用<code>wtl</code>的<code>線程管理器</code>.
在<code>移出線程/收到WM_USER消息</code>時,斷開<code>wait</code>.也可在<code>線管</code>中加入自己的<code>消息處理器</code>.當有多種<code>視窗類型</code>時,要建立視窗,隻需要任意視窗執行.
界面線程,有個<code>線程過程</code>.線管用了<code>MsgWaitForMultipleObjects</code>,因而最多<code>MAXIMUM_WAIT_OBJECTS(64)</code>線程,最多<code>63</code>個視窗.
架構
wtl,兩類視窗:<code>架構/視圖</code>視窗.架構提供<code>标題欄/邊框</code>,代碼處理<code>工具條/菜單</code>.<code>視圖</code>為<code>客戶區</code>.
線程建立<code>主架構</code>,在<code>WM_CREATE</code>中建立<code>視圖</code>.<code>sdi</code>中<code>擁有個</code>視圖類,調用<code>建立</code>就好了.
<code>MDI</code>,則在<code>CMDIFrameWindowImpl<>::CreateMDIClient()</code>中建立叫<code>MDICLIENT</code>的視窗.将<code>CMDIChildWindowImpl<></code>作為子視窗(有視圖),即<code>mdi</code>具<code>1/多</code>視窗(有<code>邊框/标題欄</code>等).
<code>CUpdateUI<></code>支援更新<code>界面映射</code>.
視圖
<code>多線程SDI和MDI</code>差不多,但沒有<code>PreTranslateMessage</code>方法.<code>sdi</code>利用它,在<code>架構</code>處理前<code>分發處理</code>消息,一般是<code>轉發消息</code>給視圖類.
要支援<code>滑鼠鍵盤</code>,則加相應<code>消息處理</code>函數至<code>消息映射</code>.如果想基于控件,則加入<code>AtlCtrls.h</code>.
要加入滾動條:
要指定滾動<code>範圍,大小或起點</code>,要在<code>WM_CREATE</code>中初化.
<code>架構視窗</code>會改變<code>視圖視窗</code>大小.你還可用<code>分割器視窗</code>,這樣,一邊<code>樹視</code>,一邊<code>列視</code>.
你要改變<code>架構視窗</code>,讓<code>分割器視窗</code>作為視圖.如<code>架構中有</code>:
在<code>建立時</code>:
<code>分割器</code>像<code>視圖</code>一樣,以<code>架構</code>為<code>父視窗</code>,也可用<code>rcDefault</code>.在<code>WM_SIZE</code>時調整.
建立<code>分割器</code>視窗後,要建立子視窗,用<code>SetSplitterPanes</code>确定分割條位置.
更新界面
可<code>使能</code>菜單,可帶<code>勾</code>标記,或<code>單選/多選</code>.菜單可有<code>圖示和文字</code>.運作時,都可改變.<code>工具欄</code>隻是<code>菜單</code>的外化.因而可有效分組.<code>更新界面</code>讓你指定<code>哪些界面</code>運作時可改變.通過<code>更新界面宏</code>來實作.
<code>wtl</code>建立數組來儲存這些資訊.
改變狀态:
<code>項</code>
指令
<code>菜單,工具條按鈕</code>
UIEnable
<code>勾号</code>
UISetCheck
<code>菜單文字</code>
UISetText
<code>選入選出</code>
<code>UISetRadio/UISetCheck</code>
如:
可放入<code>相應處理函數/OnIdle</code>中,檢查<code>類變量</code>來決定<code>元素狀态</code>.
還要确定,是否都更新了,調用<code>CUpdateUI<></code>的某個方法來加入<code>界面元件</code>至清單,已自動加入<code>主菜單</code>.
其他通過<code>UIAddMenuBar()和UIAddToolBar()</code>等來加入<code>菜單/工具欄</code>.
設定<code>工具欄</code>狀态後,用<code>UIUpdateToolBar</code>更新狀态.而<code>菜單</code>不必這樣,因為是<code>動态</code>生成<code>子菜單</code>的.而<code>UIUpdateMenuBar</code>為恢複初始狀态.
<code>UISetRadio(多個隻單選)</code>很少用,要自己編碼.
對話框
<code>wtl</code>加了<code>輸入驗證和回調函數</code>.如:你想在<code>使用者改變打開對話框</code>中檔案夾時動作,從<code>CFileDialogImpl<></code>繼承,并實作<code>OnFolderChange</code>函數.
這樣,改變<code>檔案夾</code>時就執行了.
控件
<code>WTL</code>為所有的<code>Win32和通用控件</code>提供了封裝類.
兩種使用方法:如<code>對話框</code>中有<code>控件</code>,将<code>控件</code>的<code>HWND</code>依附至<code>封裝對象</code>,用其方法來通路<code>控件</code>,簡化<code>讀寫控件資料和處理通知消息</code>.
二,把類加入<code>視圖類的繼承</code>中.
用<code>GetWndClassName</code>取得<code>視窗類</code>名字.<code>消息</code>會傳給你,如未處理由父視窗搞定.
發生事件時,<code>多數視窗控件</code>會發送<code>通知</code>給<code>父視窗</code>.由<code>視窗</code>來處理.如要處理<code>按鈕點選</code>時,隻需處理<code>BN_CLICKED</code>通知,由<code>按鈕</code>發送給<code>視窗類</code>.或從<code>CContainedWindow<></code>繼承按鈕視窗來處理<code>點選</code>事件.<code>處理通知消息</code>更快,繼承麻煩.
<code>wtl</code>還提供了<code>指令欄</code>.其他有用類:
<code>類</code>
<code>CBitmapButton</code>
<code>位圖</code>代替标題,可提供清單,在<code>正常狀态,失效, 推入和滑鼠落在按鈕上</code>等時切換
<code>CHyperLink</code>
<code>超連結</code>,點選時,打開<code>網頁</code>.
<code>CWaitCursor</code>
構造時<code>等待</code>,析構時<code>還原</code>.
<code>CCheckListViewCtrl</code>
檢查清單框.
<code>CMultiPaneStatusBarCtrl</code>
多面闆狀态欄.