分享
 
 
 

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

王朝vc·作者佚名  2006-07-04
窄屏简体版  字體: |||超大  

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即可。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有