【21】BCG使用教程 PDF 电子书

[复制链接]

该用户从未签到

759

主题

763

帖子

4660

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4660
跳转到指定楼层
楼主
发表于 2017-12-28 14:58:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

1.VC2008集成了BCGControlBar的相关功能,用wizard生成的话如果选与BCGControlBar有关的性能,如预定皮肤,则应用程序是从CWinAppEx派生,再加CBCGPWorkspace似乎不行。

2.BCG为了方便程序员,在注册表中保存了窗口的大小、位置等信息,包括工具栏的相应信息。这样减少了程序员保存和恢复用户上次使用过的界面的重复劳动。但也会造成改变菜单之类出现无反应的现象,让人摸不着头脑。可以采用的一个方法是,删除BCG 为你保存的注册表键:
HKEY_CURRENT_USER\Software\[your corporation]\[yourapplication]\Workspace
里面 your corporation 是指在 app 类里面 SetRegistryKey 指定的路径;yourapplication 就是你的应用程序名。
把这个删掉之后,还是用你最上面的代码,运行。OK!
更方便的是InitInstance里设m_bSaveState=FALSE;
如果已经有注册内容了再加一句CleanState();
程序成型后再加上。

3.应用皮肤的过程
(1)找一个BCG的例子,将菜单与皮肤相关的项复制粘贴到你的菜单下,ID值是连续的。
(2)CMainFrame的头文件中
#define CFrameWnd CBCGPFrameWnd//类定义前。这样可以省很多替换工作哦
UINT m_nAppLook;//指示应用哪个皮肤
CBCGPMenuBar  m_wndMenuBar;
//手动加入消息响应:
afx_msg void OnAppLook(UINT id);
afx_msg void OnUpdateAppLook(CCmdUI* pCmdUI);
(3)CMainFrame的Cpp文件
//消息映射增加
ON_COMMAND_RANGE(ID_VIEW_APPLOOK_2000,ID_VIEW_APPLOOK_VS2008, OnAppLook) //这是范围的响应,所以ID要连续
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_2000,ID_VIEW_APPLOOK_VS2008, OnUpdateAppLook)
//初始化函数
m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_2003);//初始的样子
//OnCreate
OnAppLook (m_nAppLook);
if (!m_wndMenuBar.Create (this))
{
  TRACE0("Failed to createmenubar\n");
  return-1;     // fail to create
}
m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle()| CBRS_SIZE_DYNAMIC);
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
EnableAutoHideBars(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMenuBar);                    //可浮动

//直接把以下两个函数拷贝上去就OK了。
void CMainFrame::OnAppLook(UINT id)
{
CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
m_nAppLook = id;
switch (m_nAppLook)
{
case ID_VIEW_APPLOOK_2000:
  // enable Office 2000look:
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager));
  break;
case ID_VIEW_APPLOOK_XP:
  // enable Office XP look:
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManagerXP));
  break;
case ID_VIEW_APPLOOK_WIN_XP:
  // enable Windows XP look (inother OS Office XP look will be used):
  CBCGPWinXPVisualManager::m_b3DTabsXPTheme= TRUE;
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPWinXPVisualManager));
  break;
case ID_VIEW_APPLOOK_2003:
  // enable Office 2003look:
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2003));
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_VS2005:
  // enable VS 2005 look:
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManagerVS2005));
  CBCGPVisualManager::GetInstance();
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_VS2008:
  // enable VS 2008 look:
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManagerVS2008));
  CBCGPVisualManager::GetInstance();
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_2007_1:
  // enable Office 2007look:
  CBCGPVisualManager2007::SetStyle(CBCGPVisualManager2007::VS2007_LunaBlue);
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_2007_2:
  // enable Office 2007look:
  CBCGPVisualManager2007::SetStyle(CBCGPVisualManager2007::VS2007_ObsidianBlack);
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_2007_3:
  // enable Office 2007look:
  CBCGPVisualManager2007::SetStyle(CBCGPVisualManager2007::VS2007_Aqua);
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
case ID_VIEW_APPLOOK_2007_4:
  // enable Office 2007look:
  CBCGPVisualManager2007::SetStyle(CBCGPVisualManager2007::VS2007_Silver);
  CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode(BCGP_DT_SMART);
  break;
default:
  ASSERT (FALSE);
}
CBCGPDockManager* pDockManager =GetDockManager ();
if (pDockManager != NULL)
{
  ASSERT_VALID(pDockManager);
  pDockManager->AdjustBarFrames();
}
RecalcLayout ();
RedrawWindow (NULL, NULL, RDW_ALLCHILDREN |RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
theApp.WriteInt (_T("ApplicationLook"),m_nAppLook);
}

void CMainFrame::OnUpdateAppLook(CCmdUI* pCmdUI)
{
pCmdUI->SetRadio (m_nAppLook ==pCmdUI->m_nID);
}

4.上下文菜单
(1)当然是新建一个需要的上下文菜单
(2)应用程序类的头文件下
virtual void PreLoadState ();
Cpp文件
void C***App:reLoadState ()
{
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);//IDR_CONTEXT_MENU是菜单的ID
// TODO: add another context menus here
}
(3)响应上下文菜单的视图类中增加对上下文菜单消息的响应
void C***View::OnContextMenu(CWnd* , CPoint point)
{
theApp.ShowPopupMenu (IDR_CONTEXT_MENU, point,this);
// TODO: 在此处添加消息处理程序代码
}




下载地址(回复可见):
游客,如果您要查看本帖隐藏内容请回复







                                                                        

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

该用户从未签到

0

主题

117

帖子

117

积分

游戏VIP会员

Rank: 3Rank: 3

积分
117
7#
发表于 2024-12-27 10:31:52 | 只看该作者
图类中增加对上下文菜单消息的响应
void C***View::OnContextMenu(CWnd* , CPoint point)
{
theApp.ShowPopupMenu (IDR_CONTEXT_MENU, point,this);
// TODO: 在此处添加消息
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

210

帖子

210

积分

邀请会员

积分
210
6#
发表于 2024-7-1 01:18:21 | 只看该作者
111111111111111111
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

122

帖子

122

积分

邀请会员

积分
122
5#
发表于 2023-8-7 22:07:38 | 只看该作者
111111111111111111111111
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

175

帖子

175

积分

邀请会员

积分
175
地板
发表于 2023-1-23 01:57:38 | 只看该作者
BCG使用教程BCG使用教程BCG使用教程
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

66

帖子

91

积分

邀请会员

积分
91
板凳
发表于 2022-9-8 19:53:50 | 只看该作者
ff快快快

fasd
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

249

帖子

261

积分

邀请会员

积分
261
沙发
发表于 2022-8-30 09:04:07 | 只看该作者
BCG使用教程
回复 支持 反对

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表