北方站长站
客服热线:0632-5117766

Visual C++ 2005图像编程之属性设置栏

[2007-11-29 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:设置 属性 编程 图像 nIndex 创建 控件 CToolBoxPropBar

  

LtB北方站长站
  工具箱含有选择、填充、画线等功能。使用这些工具时有的需要设置填充风格和线条的大小。为了方便用户操作,实现更简易的UI,实现了属性工具栏。属性栏需要添加的主要功能有2个显示文字的静态文本框和2个组合框。 LtB北方站长站
  添加属性栏控件,需要先通过资源编辑器在相应的位置上建立四个对应的工具栏按钮,对于没有接触过Visual C++ 2005的朋友可能会找不到按钮的属性编辑器。在Visual C++ 6.0中是回车(右键)弹出对话框设置的。默认情况下,在工具栏右边可以打开属性设置对话框。注意下图中红色数字的位置就是我们创建静态文本框和组合框的位置。LtB北方站长站
Visual C++ 2005图像<a href='http://edu.northz.com/webdevelop/' target='_blank' class='infotextkey'>编程</a>之属性设置栏LtB北方站长站
图2-1
LtB北方站长站
  利用前面讲述的方法建立一个CBaseToolBar的派生类CToolBoxPropBar。建立这个派生类的时候,如果选择MFC类型,将不能直接选择基类为CBaseToolBar,可以选择CToolBar然后手动修改。也可以直接选择C++类型,不选择MFC,这样就可以由我们指定任何的类名称。LtB北方站长站
  在CToolBoxPropBar类的头文件增加四个成员变量表示四个控件。在一些书籍和文章中介绍的方法是将控件变量添加到CMainFrame中,然后在CMainFrame::OnCreate()函数里创建这些控件,这样的方法虽然可行,但是在实际的项目中,会造成CMainFrame过于庞大和臃肿,不方便管理。所以我们这里通过CToolBoxPropBar等类分离了这些控件的创建过程。然后给CToolBoxPropBar类添加一个子控件创建函数void CreateSubControl();添加后工具栏的头文件:LtB北方站长站
class CToolBoxPropBarLtB北方站长站
{LtB北方站长站
 ………………//省略部分代码LtB北方站长站
 CStatic m_Static;LtB北方站长站
 CStatic m_Static2;LtB北方站长站
 CComboBox m_BrushStyle;LtB北方站长站
 CComboBox m_BrushSize;LtB北方站长站
 void CreateSubControl();LtB北方站长站
};
LtB北方站长站
  也许你会想把创建控件的代码放入CToolBoxPropBar类的OnCreate函数里。不行!因为我们创建控件的时候需要访问CToolBoxPropBar对象,如果直接在OnCreate函数里访问,就表示这个控件还没有创建成功,访问将失败。所以我们需要单独的执行函数。而且调用这个函数必须在CToolBoxPropBar创建成功后。LtB北方站长站
void CToolBoxPropBar:: CreateSubControl ()LtB北方站长站
{LtB北方站长站
 HGDIOBJ hFont = GetStockObject( DEFAULT_GUI_FONT ); //取默认GUI字体LtB北方站长站
 CFont font;LtB北方站长站
 font.Attach( hFont );LtB北方站长站
 //将IDC_1(图2-1中数字1按钮的ID)按钮设置为分隔条LtB北方站长站
 int nIndex = GetToolBarCtrl().CommandToIndex(IDC_1);LtB北方站长站
 SetButtonInfo(nIndex, IDC_1, TBBS_SEPARATOR, 60); //60表示控件的宽度LtB北方站长站
 RECT rect;LtB北方站长站
 GetItemRect(nIndex, &rect);LtB北方站长站
 m_Static.Create(_T("填充风格:"), WS_CHILD|WS_VISIBLE, rect, this, IDC_STATIC);LtB北方站长站
 m_Static.SetFont(&font);LtB北方站长站
 nIndex = GetToolBarCtrl().CommandToIndex(IDC_2);LtB北方站长站
 SetButtonInfo(nIndex, IDC_2, TBBS_SEPARATOR, 100);LtB北方站长站
 GetItemRect(nIndex, &rect);LtB北方站长站
 m_BrushStyle.Create("", WS_CHILD|WS_VISIBLE, rect, this, ID_COMBOBOX_STYEL);LtB北方站长站
 nIndex = GetToolBarCtrl().CommandToIndex(IDC_3);LtB北方站长站
 SetButtonInfo(nIndex, IDC_3, TBBS_SEPARATOR, 60);LtB北方站长站
 GetItemRect(nIndex, &rect);LtB北方站长站
 m_Static2.Create(_T("画刷大小:"), WS_CHILD|WS_VISIBLE|, rect, this, IDC_3);LtB北方站长站
 m_Static2.SetFont(&font);LtB北方站长站
 nIndex = GetToolBarCtrl().CommandToIndex(IDC_4);LtB北方站长站
 SetButtonInfo(nIndex, IDC_4, TBBS_SEPARATOR, 50);LtB北方站长站
 GetItemRect(nIndex, &rect);LtB北方站长站
 m_BrushSize.Create("", WS_CHILD|WS_VISIBLE, rect, this, ID_COMBOBOX_WIDTH);LtB北方站长站
 m_BrushSize.SetFont(&font);LtB北方站长站
}
LtB北方站长站
  最后调用过程非常简单,在CMainFrame类里和创建普通工具栏一样,在OnCreate函数里创建CToolBoxPropBar工具栏,只需要在工具栏Create之后调用CreateSubControl即可。LtB北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

下一篇链接:由C++转向C#:我们需要注意哪些方面的变化?

上一篇链接:Visual C++ 2005图像编程之工具栏

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面