动窗口的制作暨CSizingControlBar类的使用说明
動窗口的制作暨CSizingControlBar類的使用說明
?
***********************************************************
?
??本文在實現過程中,為了方便起見,參照VC 知識庫《輕松實現類VC界面》。
?
一、實現原理
圖中右側浮動窗口的實現類是從CControlBar派生出來的,我們并不需要從頭到尾實現該類,因為Cristi Posea先生已經為我們實現了一個稱為CSizingControlBar的類,而且做得相當完美!我們所要做的便是好好地利用該類,為了盡可能地簡潔,將CSizingControlBar類修改了一下并命名為CCoolBar,接下來我們將詳細介紹如何利用該類實現我們所需的界面。
二、實現步驟示例
[1]前期準備
已知一個單文檔的MFC工程TESS,其它選項默認。
將本文示例代碼中的CSizingControlBar類源文件sizecbar.h sizecbar.cpp 和CCoolBar類源文件scbarg.h scbarg.cpp 四個文件復制到工程目錄下。
在菜單Project->Add to project->Files將四個文件加入工程中,此時在ClassView中將出現了一個稱為CCoolBar的類。
在stdafx.h文件中加上
#include "sizecbar.h"
#include "scbarg.h"
[2]開始編碼
2.1 為CMainFrame增加成員變量??? //浮動窗口對象
CCoolBar??? m_wndMyBar;
以下代碼需要添加到CMainFrame::OnCreate中,方法與普通工具條的創建沒有太大的區別!
2.2 創建ControlBar
//創建浮動窗口—日志欄if(!m_wndMyBar.Create(_T("日志欄"),??????? //浮動窗口名稱this,????? ?????????//父指針CSize(300,200),???? //窗口大小TRUE,??????????????? //是否需要gripper224))??????????????? //窗口ID?????? {????????????? TRACE0("未能創建日志欄!\n");??????????????????? return -1;?????? }
?
2.3 停靠控制?? //設置ControlBar風格,必須在工具欄風格設置之后
//浮動窗口—日志欄風格
?? m_wndMyBar.SetBarStyle(m_wndMyBar.GetBarStyle()|? CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
?? m_wndMyBar.EnableDocking(CBRS_ALIGN_ANY);??
? DockControlBar(&m_wndMyBar,
AFX_IDW_DOCKBAR_RIGHT);//停靠在右邊
?? 此時我們已經生成了一個控制條窗口,但窗口中還沒有任何東西!讓我們來做最后一件事情:往窗口添加所需部件!
2.4 向浮動窗口中添加我的控件
這個問題看似有些麻煩其實相當簡單:我們只要在創建這些控件時將控制條窗口指針作為父窗口指針賦值給這些控件即可!
[1]將屬性頁放入右邊的控制條
本文的示例代碼中提供了一個稱為CCoolTabCtrl的封裝類,屬性頁的封裝類,我們用它可以簡單地創建出TabCtrl,先請看如下代碼
(1)在CMainFrame頭文件中聲明成員變量:
????????????? CCoolTabCtrl ????????m_TabCtrl;
(2)在CMainFrame::OnCreate方法中,在浮動窗口創建代碼之后,添加屬性頁創建代碼:
? ?m_TabCtrl.Create(
TCS_DOWN|WS_CHILD|WS_VISIBLE,???????? //屬性頁風格
CRect(0,0,250,200),????????????????????????? //屬性頁大小
&m_wndMyBar,2046);??????????????????????? //父窗口指針及ID
?[2] 向屬性頁中添加對話框
? 首先在資源編輯器里制作一個CHILD類型的無BORDER對話框,ID為IDD_LOG,
并以此為模板生成CSysLog類。需要注意的是,希望添加到屬性頁m_TabCtrl中的對話框,在其類定義和實現文件中必須分別加上DECLARE_DYNCREATE(CSysLog)和IMPLENMENT_DYNCREATE(CSysLog,CDialog)。
然后在CMainFrame::OnCreate方法中m_TabCtrl 創建代碼之后,添加:
m_TabCtrl.AddPage(
RUNTIME_CLASS(CSysLog),??????????? //對話框映射的運行時類
IDD_LOG,????????????????????? //對話框ID
"日志",??????????????? ?????//添加對話框頁的頁名
IDI_TEXT);???????????????? //添加對話框頁的圖標
[3]最后,更新屬性頁面
?????? m_TabCtrl.UpdateWindow();
?
轉載于:https://www.cnblogs.com/kangwang1988/archive/2010/06/12/1757198.html
總結
以上是生活随笔為你收集整理的动窗口的制作暨CSizingControlBar类的使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: coolite TreePanel Ch
- 下一篇: 教程:创建简单的 ETL 包