天天看點

wtl體系結構

<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&lt;&gt;::CreateMDIClient()</code>中建立叫<code>MDICLIENT</code>的視窗.将<code>CMDIChildWindowImpl&lt;&gt;</code>作為子視窗(有視圖),即<code>mdi</code>具<code>1/多</code>視窗(有<code>邊框/标題欄</code>等).

<code>CUpdateUI&lt;&gt;</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&lt;&gt;</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&lt;&gt;</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&lt;&gt;</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>

多面闆狀态欄.

上一篇: MOSS應用場景
下一篇: React初體驗

繼續閱讀