BCG做的多屏显示器,以及CBCGPTabWnd标签页分离合并的一个功能实现。

这篇博客记录了作者在MFC中使用BCG库实现多屏显示器功能的过程,特别是如何在副屏上轮流切换显示CBCGPTabWnd标签页(如A,B,C)和CBCGPDockingControlBar类型的m_wndOutput组件。作者通过CBCGPTabWnd的DetachTab()和FloatControlBar()函数,以及自定义的多屏幕判断类,实现了标签页的分离、移动和重新显示。这是一个解决界面显示问题的详细过程。
摘要由CSDN通过智能技术生成

以前很少做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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值