程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 軟件框架的利器、TangramMini組件應用教程三:基本使用

軟件框架的利器、TangramMini組件應用教程三:基本使用

編輯:關於VC++

在上一篇中我介紹了SetWnd()以及Save()的用法,我相信大家已經知道怎樣安裝自己的窗口組件了,在這一篇中我將介紹一下TangramMiniCtrl組件的基本方法,以及將Tutorial1對話框程序改造成一個軟件的模型。

首先,我們來改造這個對話框程序。因為是個框架程序,所以做為一個對話框我們假設這個對話框要有可改變窗體尺寸的要求,我們先更改窗體屬性,顯示主對話框的屬性對話框(View -> Properties),在Dialog Properties對話框中,進入Styles頁,將Border列表中選擇Resizing,並將Minimize box以及Maximize box復選框選上,為了防止控件在改變尺寸時閃爍,選上Clip children選項,最終如下圖所示:

這樣更改之後,對話框就在運行時可以改變尺寸大小了,也可以最大化、最小化,但是我們畫上去的TangramMiniCtrl組件並不會同步更改大小,這樣我們有必要響應主對話框的確WM_SIZE消息,並在此消息處理過程中改變TangramMiniCtrl組件的尺寸。

首先,響應WM_SIZE消息,在ClassView中,右擊主對話框類(CTutorial1Dlg),在右擊菜單中選擇Add Windows Message Handler…項,在彈出的對話框中,從左邊的New Windows messages/events列表中選擇WM_SIZE並雙擊(選擇後單擊Add Handler也一樣),此對話框自動將WM_SIZE消息加入到右邊的Existing message/event handlers列表中。然後在右邊的列表中雙擊WM_SIZE項,VC自動轉到OnSize(…)函數中,我們在這裡加入以下代碼:

if (IsWindow(m_wndMiniCtrl.m_hWnd))
{
     m_wndMiniCtrl.MoveWindow(0,0,cx,cy,false);
}

最終代碼如下:

加入此代碼後,編譯運行之後,對話框可以更改大小,TangramMiniCtrl組件相對應的更改尺寸並平鋪整個對話框。但是剛啟動的時候,TangramMiniCtrl組件並沒有更改尺寸,並且上面還有兩個按鈕,刪掉按鈕(或者隱藏也可),並在BOOL CTutorial1Dlg::OnInitDialog()函數體中SetWnd()之後加入以下代碼:CRect rt;
GetClientRect(&rt);
m_wndMiniCtrl.MoveWindow(0,0,rt.Width(),rt.Height(),false);

這樣程序一啟動就會調節尺寸, 現在尺寸合理了,但是沒有退出的地方,我們給對話框加入一個菜單(Insert -> Resource…)在彈出的Insert Resource對話框中,選擇Menu,然後單擊New按鈕,加入一個菜單(IDR_MENU1),我們加入的菜單簡單一點,就一個File菜單下有一項Exit項(ID為ID_FILE_EXIT),此Exit項對應的於CTutorial1Dlg類,添加此項的COMMAND消息,處理函數為OnFileExit(),在函數體內加入退出代碼(我加入了保存框架的功能):m_wndMiniCtrl.Save();
CDialog::OnOK();

然後設置主對框資源的菜單為IDR_MENU1,對話框屬性中的General頁將Menu項設置為IDR_MENU1,最終編譯運行效果圖如下:

從圖上可以看出,現在已經不再是一個簡單的對話框了,有了點像軟件的模型,但是可能你不喜歡分頁名Page1、Page2這樣的標題顯示,可能要顯示點別的,比如我計劃第二頁放一個About對話框,我們有必要改標題為Main、About之類的名稱,我們利用SetCaption方法可以有效的更改標題。

BOOL SetCaption(LPCTSTR strObjName, LPCTSTR strCaption);

該方法有兩個參數,第一個參數為Tangram節點對象的名稱,第二個參數為我們要設置的新標題,兩個參數都為字符串類型,返回布爾型,表示設置是否成功。

為了改變標題,我們繼續在BOOL CTutorial1Dlg::OnInitDialog()函數體中加入以下代碼:

m_wndMiniCtrl.SetCaption(_T("page1"),_T("Main"));
m_wndMiniCtrl.SetCaption(_T("page2"),_T("About"));

加入此兩行代碼後,分頁上的標題將被修改為Main、About。

在這步之後,我新建了一個CAboutDlg對象,並將此對象設置到Page2中,要將一個對話框放在另一個對話框中,最好做一些有必要的風格修改,我將CAboutDlg對話框的風格屬性修改結果如下:Style修改為Child,Border修改為None,並將上面的OK按鈕設置為不可見,這樣是為了防止用戶單擊此按鈕而銷毀此窗體。

具體的在page2中安裝CAboutDlg的分以下幾步:

1、在CTutorial1Dlg定義一個類型為CAboutDlg*的成員變量m_pAboutDlg;

2、分配(new)一新CAboutDlg對象給m_pAboutDlg,並創建對象(Create);

3、安裝窗口,利用SetWnd()方法,Tangram節點名稱為page2;

4、刪除(delete)分配的空間。

具體的代碼可以查看源碼,我這裡就不貼出來了。通過上面的修改後,我們的結果如下:

通過上圖,我們可以看出標題已經修改了,而且給第二頁添加了對象。

現在新的問題是可能你正在看About頁,然後用File菜單中的Exit功能退出程序,由於退出的時候記住了框架,因此程序重新啟動的時候還是會顯示為About頁,可能你認為這樣不好,你要求每次啟動時都應該顯示Main頁,那麼你就有必要使用一個新的方法SetActive()。

BOOL SetActive(LPCTSTR strObjName);

該方法需要一個參數為Tangram節點對象名稱,返回一個布爾值,表示設置是否成功。

我們在BOOL CTutorial1Dlg::OnInitDialog()函數體中加入此語句:

m_wndMiniCtrl.SetActive(_T("page1"));

表示每一次啟動程序時默認顯示第一頁。

好了,這一篇就介紹到這裡,主要介紹了兩個方法:SetCaption與SetActive,都很方便使用,在下一篇中我將完成一些基本的通信,大家將看到更高級的效果與更好的體驗。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved