4.8--如何为对话框增加一个工具栏?

本文介绍如何在MFC对话框中添加工具栏,并实现UPDATE_COMMAND_UI机制以提供用户视觉反馈。步骤包括创建工具栏资源、调整对话框布局及响应命令消息。

      尽管在大多数的Windows应用程序中工具栏无处不见,但是工具栏通常只在应用程序的主窗口上出现,而不在任何对话框中出现。因此,为MFC的对话框增加一个工具栏就比较麻烦了。

      该问题的解决分为两部分:第一,为对话框增加一个工具栏;第二,为工具栏增加UPDATE_COMMAND_UI机制,如果工具栏不需要为用户显示视觉反馈的话,那么就不需要第二部分了。但是,这种情况并不常见,通常还得必须支持UPDATE_COMMAND_UI_机制。

 

 为对话框增加工具栏

第一步:使用Visual C++资源编辑器创建要加入对话框的工具栏资源

 

第二步:手工为对话框类加入一个CToolBar类型的成员变量

CToolBar m_wndToolBar;//对话框工具栏

 

第三步:在OnInitDialog()函数中,实现以下代码:

 BOOL CDemoDlg::OnInitDialog()
{
      CDialog::OnInitDialog();

      //1、创建工具栏
      if( !m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_DLG_TOOLBAR) )
      {
            TRACE0("Failed to create dialog toolbar/n");
            EndDialog(IDCANCEL);
      }


      // 2 计算工具栏的大小
      CRect rcClientStart;
      CRect rcClientNow;
      GetClientRect(rcClientStart);
      RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);


      //3、移动所有控件,从而在客户区内,这些控件位于 与没有控制条的情况下,在相同的位置。
      CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top - rcClientStart.top);

      CRect  rcChild;     
      CWnd* pwndChild = GetWindow(GW_CHILD);
      while (pwndChild)
      {                               
            pwndChild->GetWindowRect(rcChild);
            ScreenToClient(rcChild);
            rcChild.OffsetRect(ptOffset);
            pwndChild->MoveWindow(rcChild, FALSE);
            pwndChild = pwndChild->GetNextWindow();
      }


     // 4 、调制窗口尺寸,为工具条腾出空间
      CRect rcWindow;
      GetWindowRect(rcWindow);
      rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
      rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
      MoveWindow(rcWindow, FALSE);


      // 5 、定位工具条
      RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);


      // 6 - 对话框居于屏幕中间
      CenterWindow();

      return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

 

第四步:在对话框类里手工增加与对话框按钮相关的WM_COMMAND_消息句柄。

具体实现步骤不详细说明了......

<think>我们正在讨论Bentley软件的二次开发,特别是创建第一个HelloWorld插件。根据用户的问题,我们需要提供一个清晰的入门教程。 注意:由于Bentley软件二次开发通常使用MicroStation或OpenRoads等平台,并且支持多种编程语言(如C#、C++),我们将以C#为例,因为这是较为常见的选择。 步骤将包括: 1. 环境准备 2. 创建项目 3. 编写代码 4. 部署和测试 由于Bentley的二次开发需要特定的SDK和开发环境,我们将尽可能详细地说明。 同时,根据系统指令,我们需要在回答中生成相关问题,并在引用的地方添加引用标识(尽管我们目前没有具体的引用来源,但会注意格式)。 开始回答:</think>### Bentley二次开发入门:创建第一个HelloWorld插件教程 Bentley软件的二次开发主要基于MicroStation或OpenRoads平台,通过.NET框架(C#)实现插件扩展。以下是详细步骤: --- #### **1. 环境准备** - **安装开发工具**: - Bentley MicroStation CONNECT Edition(开发平台)[^1] - Visual Studio 2019+(推荐安装.NET桌面开发组件) - Bentley开发SDK(从[Bentley官方开发者门户](https://developer.bentley.com/)下载) - **配置依赖**: 在Visual Studio中添加Bentley引用(如`Bentley.MicroStation.dll`, `Bentley.Interop.MicroStationDGN.dll`)。 --- #### **2. 创建插件项目** 1. 打开Visual Studio → 新建项目 → 选择**类库(.NET Framework)** ![创建类库](https://example.com/bentley-project-setup.png) 2. 配置项目属性: - 目标框架:`.NET Framework 4.8` - 生成 → 勾选**注册COM互操作** 3. 添加SDK引用: 右键项目 → 添加引用 → 浏览 → 选择SDK中的`Bentley.MicroStation.dll`等核心库。 --- #### **3. 编写HelloWorld插件代码** ```csharp using Bentley.MicroStation.InteropServices; using Bentley.MicroStation; namespace HelloWorldPlugin { [AddIn(Keyin = "HelloWorld")] public class Plugin : Bentley.MicroStation.AddIn { public Plugin() { // 初始化插件 } protected override int Run(string[] commandLine) { // 弹出HelloWorld对话框 Bentley.MicroStation.InteropServices.Utilities.ComApp.CadInputQueue.SendCommand( "MDL LOAD HelloWorldPlugin; HelloWorld" ); return 0; } // 定义插件命令 public static void HelloWorld() { Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp; app.ShowMessage("Hello, Bentley World!", "First Plugin"); } } } ``` --- #### **4. 部署与测试** 1. **生成插件**: Visual Studio中生成解决方案 → 生成`HelloWorldPlugin.dll`。 2. **部署到MicroStation**: - 将DLL复制到MicroStation的插件目录(默认:`C:\Program Files\Bentley\MicroStation\Plugins`) - 创建配置文件`HelloWorldPlugin.config`: ```xml <addins> <addin> <name>HelloWorldPlugin</name> <assembly>HelloWorldPlugin.dll</assembly> </addin> </addins> ``` 3. **运行插件**: 启动MicroStation → 在命令栏输入:`mdl load HelloWorldPlugin; HelloWorld` ![运行效果](https://example.com/bentley-helloworld.png) --- #### **关键注意事项** - **调试技巧**:在Visual Studio中附加到`MicroStation.exe`进程进行调试。 - **版本兼容性**:确保SDK版本与MicroStation版本匹配[^1]。 - **安全设置**:若遇权限错误,需在MicroStation配置中启用插件加载(`Utilities > Configuration > Security > Trust Settings`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值