以前很少做MFC的工作,最近在忙一个界面,要用到BCG库实现。一切都无从资料下手。自己对这个库也不是很熟悉,之前的一些基本界面组件创建已经搞出来了,包括组件位置,主控按钮面板,界面组件显示和隐藏,以及图标加载,界面风格样式什么的,而新的一个功能需求就是要在多屏显示(包括一个CBCGPTabWnd标签组页,这个标签组假设有A,B,C三个标签,还有一个切换显示的是另一个组件假设叫m_wndOutput,它是一个CBCGPDockingControlBar类型)。要求m_wndOutput和CBCGPTabWnd标签组页轮流切换显示在副屏,摸索了两天搞出来了。特此记忆一下。
组件的关系如下:
定义一个派生自CBCGPDockingControlBar类型的类CClientDisplayBar m_wndClientDisplay;并将m_wndClientDisplay作为界面视图类的一个成员
下面给出CClientDisplayBar 的定义
CClientDisplayBar类的定义开始
// CClientDisplayBar.h : interface of the CClientDisplayBar class
//
/
#include "VideoBar.h"
#include "MapBar.h"
#pragma once
enum ClientDisplayTab
{
<span style="white-space:pre"> </span>CLIENT_TAB_VIDEO = 0,
<span style="white-space:pre"> </span>CLIENT_TAB_MAP = 1
};
class CClientDisplayBar : public CBCGPDockingControlBar
{
public:
<span style="white-space:pre"> </span>CClientDisplayBar();
<span style="white-space:pre"> </span>virtual ~CClientDisplayBar();
// Attributes
public:
<span style="white-space:pre"> </span>CBCGPTabWnd<span style="white-space:pre"> </span>m_wndTabs;
<span style="white-space:pre"> </span>CVideoBar m_wndVideo;
<span style="white-space:pre"> </span>CMapBar m_wndMap;
protected:
<span style="white-space:pre"> </span>CImageList m_imageList;
// Operations
public:
// Overrides
<span style="white-space:pre"> </span>// ClassWizard generated virtual function overrides
<span style="white-space:pre"> </span>//{
{AFX_VIRTUAL(COutputBar)
<span style="white-space:pre"> </span>//}}AFX_VIRTUAL
// Implementation
public:
<span style="white-space:pre"> </span>BOOL RemoveExistTab(int ClientTabType);//移除ClientTabType所标示的标签
<span style="white-space:pre"> </span>int RestoreDetachTab(int ClientTabType);//返回ClientTabType所标示的标签的索引
// Generated message map functions
protected:
<span style="white-space:pre"> </span>//{
{AFX_MSG(CClientDisplayBar)
<span style="white-space:pre"> </span>afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
<span style="white-space:pre"> </span>afx_msg void OnSize(UINT nType, int cx, int cy);
<span style="white-space:pre"> </span>//}}AFX_MSG
<span style="white-space:pre"> </span>DECLARE_MESSAGE_MAP()
public:
<span style="white-space:pre"> </span>afx_msg void OnPaint();
private:
<span style="white-space:pre"> </span>bool CreateVideoBar();
<span style="white-space:pre"> </span>bool CreateMapBar();
};
/
// outputbar.cpp : implementation of the CClientDisplayBar class
//
#include "stdafx.h"
#include "inteface.h"
#include "ClientDisplay.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const UINT nClientTabs = 2;
/
// CClientDisplayBar
BEGIN_MESSAGE_MAP(CClientDisplayBar, CBCGPDockingControlBar)
//{
{AFX_MSG_MAP(CClientDisplayBar)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/
// CClientDisplayBar construction/destruction
CClientDisplayBar::CClientDisplayBar()
{
// TODO: add one-time construction code here
}
CClientDisplayBar::~CClientDisplayBar()
{
}
/
// CClientDisplayBar message handlers
bool CClientDisplayBar::CreateVideoBar()
{
if (!m_wndVideo.Create (_T("视频"),this, FALSE,MAKEINTRESOURCE(IDD_VIDEOBAR)
,WS_CHILD | WS_VISIBLE| CBRS_BOTTOM,IDD_VIDEOBAR,CBRS_BCGP_REGULAR_TABS,
AFX_CBRS_FLOAT&~AFX_CBRS_CLOSE))
{
return false; // fail to create
}
retu