<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
2.1.1 工具箱的属性设置栏
工具箱含有选择、填充、画线等功能。使用这些工具时有的需要设置填充风格和线条的大小。为了方便用户操作,实现更简易的UI,实现了属性工具栏。属性栏需要添加的主要功能有2个显示文字的静态文本框和2个组合框。
添加属性栏控件,需要先通过资源编辑器在相应的位置上建立四个对应的工具栏按钮,对于没有接触过Visual C++ 2005的朋友可能会找不到按钮的属性编辑器。在Visual C++ 6.0中是回车(右键)弹出对话框设置的。默认情况下,在工具栏右边可以打开属性设置对话框。注意下图中红色数字的位置就是我们创建静态文本框和组合框的位置。
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 255pt; HEIGHT: 32.25pt" type="#_x0000_t75"><imagedata o:title="未标题-1 拷贝" src="file:///C:/DOCUME~1/Jon/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg"></imagedata></shape>
图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即可。
相关推荐
Visual C++.NET图像处理编程
(Visual C++编程 源代码)15.如何将彩色图像转换成黑白图像?(Visual C++编程 源代码)15.如何将彩色图像转换成黑白图像?(Visual C++编程 源代码)15.如何将彩色图像转换成黑白图像?(Visual C++编程 源代码)...
Visual C++ 实践与提高—图形图像编程篇
大学Visual C++.NET 图像处理编程的课件 感觉不错 大家一起分享
Visual C++图形图像编程技巧.Visual C++图形图像编程技巧.Visual C++图形图像编程技巧.Visual C++图形图像编程技巧.
全书内容涵盖了大量的Visual C++ 2005编程新技术和新理念,包括ToolStrip控件应用、泛型应用、注册表管理、WMI管理规范使用、XML文件处理、多线程处理、程序异常处理、文件压缩及解压缩、文件加密解密、文件访问权限...
精通Visual C++.NET图像处理编程(第二版)
精通Visual C++图像编程 精通Visual C++图像编程
本书用200个独立的实例程序重点展示Microsoft Visual C++ 2005(Microsoft.NET Framework 2.0)编程技术精华。全书摒弃语法说教、通篇贯穿实例,主要内容包括:ToolStrip系列控件应用、WMI管理规范查询、GDI+图像...
精通Visual C++图像编程pDF,非常实用的教程。
精通Visual C++图像编程 精通Visual C++图像编程
visual c++ 实践与提高—图形图像编程篇
(Visual C++编程 源代码)22.如何在状态栏上加载图像?(Visual C++编程 源代码)22.如何在状态栏上加载图像?(Visual C++编程 源代码)22.如何在状态栏上加载图像?(Visual C++编程 源代码)22.如何在状态栏上...
(Visual C++编程 源代码)20.如何实现图像的马赛克效果?(Visual C++编程 源代码)20.如何实现图像的马赛克效果?(Visual C++编程 源代码)20.如何实现图像的马赛克效果?(Visual C++编程 源代码)20.如何实现...
精通Visual C++.NET图像处理编程 PDF文档,周长发编著
周长发《精通Visual C++图像处理编程》书中所有图像处理方法的完整源码,综合案例
(Visual C++编程 源代码)13.如何设置应用程序窗口的背景图像?(Visual C++编程 源代码)13.如何设置应用程序窗口的背景图像?(Visual C++编程 源代码)13.如何设置应用程序窗口的背景图像?(Visual C++编程 源...
Visual C++.NET图像处理编程一书的所有源代码。。。
Visual C++图形图像编程技巧 丁有和 著 2000出版 和前面自己上传的文件是一样的,由于网络原因,上传后没有看到自己的资源,然后又再上传了一遍,还请csdn管理员删除本文件以节约空间。