2.1.1 工具箱的属性设置栏

工具箱含有选择、填充、画线等功能。使用这些工具时有的需要设置填充风格和线条的大小。为了方便用户操作,实现更简易的UI,实现了属性工具栏。属性栏需要添加的主要功能有2个显示文字的静态文本框和2个组合框。

添加属性栏控件,需要先通过资源编辑器在相应的位置上建立四个对应的工具栏按钮,对于没有接触过Visual C++ 2005的朋友可能会找不到按钮的属性编辑器。在Visual C++ 6.0中是回车(右键)弹出对话框设置的。默认情况下,在工具栏右边可以打开属性设置对话框。注意下图中红色数字的位置就是我们创建静态文本框和组合框的位置。

图2-1

利用前面讲述的方法建立一个CBaseToolBar的派生类CToolBoxPropBar。建立这个派生类的时候,如果选择MFC类型,将不能直接选择基类为CBaseToolBar,可以选择CToolBar然后手动修改。也可以直接选择C++类型,不选择MFC,这样就可以由我们指定任何的类名称。

在CToolBoxPropBar类的头文件增加四个成员变量表示四个控件。在一些书籍和文章中介绍的方法是将控件变量添加到CMainFrame中,然后在CMainFrame::OnCreate()函数里创建这些控件,这样的方法虽然可行,但是在实际的项目中,会造成CMainFrame过于庞大和臃肿,不方便管理。所以我们这里通过CToolBoxPropBar等类分离了这些控件的创建过程。然后给CToolBoxPropBar类添加一个子控件创建函数void CreateSubControl();添加后工具栏的头文件:

class CToolBoxPropBar

{

………………//省略部分代码

CStatic    m_Static;

CStatic    m_Static2;

CComboBox   m_BrushStyle;

CComboBox   m_BrushSize;

void CreateSubControl();

};

也许你会想把创建控件的代码放入CToolBoxPropBar类的OnCreate函数里。不行!因为我们创建控件的时候需要访问CToolBoxPropBar对象,如果直接在OnCreate函数里访问,就表示这个控件还没有创建成功,访问将失败。所以我们需要单独的执行函数。而且调用这个函数必须在CToolBoxPropBar创建成功后。

void CToolBoxPropBar:: CreateSubControl ()

{

HGDIOBJ hFont = GetStockObject( DEFAULT_GUI_FONT );  //取默认GUI字体

CFont font;

font.Attach( hFont );

//将IDC_1(图2-1中数字1按钮的ID)按钮设置为分隔条

int nIndex = GetToolBarCtrl().CommandToIndex(IDC_1);

SetButtonInfo(nIndex, IDC_1, TBBS_SEPARATOR, 60);   //60表示控件的宽度

RECT rect;

GetItemRect(nIndex, &rect);

m_Static.Create(_T("填充风格:"), WS_CHILD|WS_VISIBLE, rect, this, IDC_STATIC);

m_Static.SetFont(&font);

nIndex = GetToolBarCtrl().CommandToIndex(IDC_2);

SetButtonInfo(nIndex, IDC_2, TBBS_SEPARATOR, 100);

GetItemRect(nIndex, &rect);

m_BrushStyle.Create("", WS_CHILD|WS_VISIBLE, rect, this, ID_COMBOBOX_STYEL);

nIndex = GetToolBarCtrl().CommandToIndex(IDC_3);

SetButtonInfo(nIndex, IDC_3, TBBS_SEPARATOR, 60);

GetItemRect(nIndex, &rect);

m_Static2.Create(_T("画刷大小:"), WS_CHILD|WS_VISIBLE|, rect, this, IDC_3);

m_Static2.SetFont(&font);

nIndex = GetToolBarCtrl().CommandToIndex(IDC_4);

SetButtonInfo(nIndex, IDC_4, TBBS_SEPARATOR, 50);

GetItemRect(nIndex, &rect);

m_BrushSize.Create("", WS_CHILD|WS_VISIBLE, rect, this, ID_COMBOBOX_WIDTH);

m_BrushSize.SetFont(&font);

}

最后调用过程非常简单,在CMainFrame类里和创建普通工具栏一样,在OnCreate函数里创建CToolBoxPropBar工具栏,只需要在工具栏Create之后调用CreateSubControl即可。

转载于:https://www.cnblogs.com/hehe520/archive/2006/07/03/6330116.html

打造自己的专业图像工具-Visual C++ 2005图像编程系列【四】相关推荐

  1. 打造自己的专业图像工具-Visual C++ 2005图像编程系列【一】

    作者:Lai Yiling 返回到目录 1.1   Visual C++ 2005集成环境介绍   2005年微软发布了最新的集成开发环境Visual Studio 2005,这又是一款大师级作品,很 ...

  2. Visual Studio 2005 插件编程(代码行数统计插件)之一

    原文:http://www.codeproject.com/useritems/LineCounterAddin.asp 注意:1.本文中的提到的"外接程序"等同与"插件 ...

  3. 如何使用PPT图像电子相册,打造一场专业的图片抽奖活动?

    [权威报道]如何使用PPT图像电子相册,打造一场专业的图片抽奖活动? 我们在电视上,经常发现电视台搞一下现场观众的抽奖活动.他们通过现场视频抓图或提前准备好的观众照片来完成随机抽奖.同时,使用POWE ...

  4. 【AIGC】3、Visual ChatGPT | 支持图像/文本双输入的对话系统开源啦

    文章目录 一.背景 二.Visual ChatGPT 2.1 对系统规则的提示管理 2.2 基础模型的提示管理 2.3 . 用户提问的提示管理 2.4 基础模型输出的提示管理 三.实验 3.1 实验设 ...

  5. UML工具Visual Paradigm最新版本16.2发布

    表单构建器的改进 表单构建器中添加了许多新功能,以: 改善表格的外观 通过新字段和收集器支持促进更好的数据收集 支持表单逻辑以显示/隐藏字段 新表格栏位 支持一组丰富的表单字段.您可以轻松找到适合您数 ...

  6. 六大类专业搜索工具(转)

    转载:http://www.jianshu.com/p/ae7c8513bb00 我的一位朋友,用了10年的电脑. 作为一名老网民,他的信息检索能力让我诧异. 每次需要找点图片.网站.研究报告甚至小电 ...

  7. 计算机专业试题软件,计算机专业《工具软件》试题

    计算机专业<工具软件>试题 计算机专业<工具软件>试题 一.单项选择题(每题2分,共50分) 1.一个完整的计算机系统由哪两大部分组成(). A.系统软件.应用软件 B.系统软 ...

  8. 教学常用计算机软件包括,计算机专业常用工具软件课程的教与学

    科 技 教 育 计算机专业常用工具软件课程的教与学 范鲁娜 (郑州广播电视学校 河南郑州 450000) 摘 要:随着计算机科学技术的迅猛发展,计算机应用已经深入到社会生活的各个方面.总体上,我国很多 ...

  9. cadsofttools图像工具

    cadsofttools图像工具 -CAD DLL允许使用支持DLL技术的不同语言向应用程序添加CAD功能. 该库可用于广泛的工业领域: 机械工业, 建造, 电路技术 制图 分析系统, 以及涉及CAD ...

最新文章

  1. 8个计算机视觉深度学习中常见的Bug
  2. 深圳.NET俱乐部 Windows 7 社区发布会总结及资源下载
  3. JavaSE基础知识(5)—面向对象(5.3访问修饰符)
  4. Waymo冰火两重天:无人出租车最快今秋推出,高管团队嫌隙严重
  5. redhat7.2创建本地yum源
  6. mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量
  7. 怎样设置电脑壁纸_怎样把C盘设置成禁止安装任何软件?教你两个方法,告别电脑卡顿...
  8. L2-003 月饼 (25 point(s))
  9. kafka搭建、学习(一)
  10. 机器码、序列号、认证码、注册码的生成算法(三)
  11. 笔记本电脑电源和电池充电管理电路设计
  12. 如何理解刑法中的“以非法占有为目的”
  13. 金融领域的数字化转型和科技创新有哪些应用?
  14. 如何在Foobar2000中使用iPod
  15. java算法:1234组成无重复的三位数
  16. 检测按键正确的小游戏
  17. “征服自己是最大的胜利,被征服是最大的耻辱和邪恶。”
  18. cdq分治 学习笔记
  19. 看到结局不会失望的,中国传统美食
  20. JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

热门文章

  1. go 是常驻内存吗_图解 Go 内存分配器
  2. c语言log_C语言最大难点揭秘:编程的祸根!
  3. ppt复制切片器_【PPT】高端人物活动介绍页PPT创意设计制作
  4. 如何修改游戏服务器端的数据,如何修改网络游戏服务器数据
  5. 根据多个字段分组_Excel 分组后计算
  6. STM32F103使用DAC功能输出正弦波
  7. 2018.9.18opencv3.4.1 + vs 2017 community +win 10 x64+cmake 3.11.3终终终章!
  8. Magedu2_3 linux文件目录
  9. redis系列:redis介绍与安装
  10. BZOJ4868: [Shoi2017]期末考试