📄 10.2.2 设置线型.txt
字号:
10.2.2 设置线型
接下来,只J Graphic程序添加允许用户设置线型的功能,本例将提供一些单选按钮让
用户从多种线型中选择一种。
首先再为Graphic程序己有的设置对话框资源添加一个组框,并将其Caption设置为:线型。我们知道,
组框的作用通常是起标示作用,所以它的E默认情况下是IDC-STATIC。但是,如果在程序中需要对组
框进行操作的话,那么其 ID就不能是默认的 IDC STATIC 了,需要修改这个ID。因为后面的程序会
对这个组框进行一些操作,所以这里将它的E
修改为: IDC_LINE_STYLE。
~rlhnq ".院-接着,在此组框内放置三个单选按钮,保持它们默认
棚 !ω的ID值不变,将它们的名称分别设置为:实线、虚线、点
组里 线。这时,设置对话框资源如图10.7所示 (读者可以根据
r!l;蝇
实际情况调整对话框资源的大小,及各控件的位置)。
r J:l始
i I r点槐然后,将这三个单选按钮设置成为一组。方法是在第
一一一个单选按钮(实线)上单击鼠标右键,并从弹出的快捷
图 10.7设置对话框资源(二)菜单中选择【 Properties】菜单项,打开其属性对话框,选
中 Group选项(如图 10.8所示)。这时,这三个单选按钮
就成为一组的了。接下来,利用 ClassWizard为这组单选按钮关联一个成员变量:m-nLineStyle,如
图 10.9所示。这样,在程序运行时,如果选中第一个单选按钮,该变量的值就是 0;如果选中第二
个单选按钮,该变量的值就是 1 ;如果选中第三个单选按钮,该变量的值就是2;如果都没有选中,
那么该变量的值是一l。
同样,当用户单击设置对话框上的【OK】按钮关闭该对话框后,应该将用户选择的线型保存下来,
因此需要为 CGraphicView类再添加一个 int类型的私有成员变量: m_nLineStyle.并在该类的构造
函数中将其初始化为0。
然后,在CGraphicView类的OnSetting函数中,当用户单击设置对话框的OK按钮关闭该对话框后,将
用户选择的线型保存到CGraphicView类的m_nLineStyle变量中。另外,与前面线宽的设置一样,为
了把上一次选择的线型保存下来,同样需要在 CGraphicView 类中把己保存的线型值再设置回设置
对话框的线型变量。因此,这时的 OnSetting函数的代码如例10-11所示,加灰的代码就是新增的。
" ‘ I 371
第 10
l咱, I.,,~附耐"
』叩..........阳制曲.1句-1
E1111 C. c腼"…0:
i阳刚k出 F可币2
3莹蜀
.‘-1曲-‘·"hdh.·h脏、"回四....幢幢阳咂泪.....
酌 I!DC_RADIOl到 M皿罔 F啕.... p画画口--
「国帽_
r......
""
图 10.8设置单选按钮的组属性图 10.9为单选按钮关联成员变量 例 10-11
void CGraphicView::OnSetting() { , CSettingDlg dlg; dlg.m_nLineWidth = m_nLineWidth;
dlg.m_nLineStyle = m_nLineStyle; if(工 DOK==dlg.DoModal()) { m_nLineWidth =
dlg.m_nLineWidth; m_nLineStyle = dlg.m_nLineStyle;
获得用户指定的线型后,程序应根据此线型创建画笔,也就是说,如果用户当前选中的是实线,就
创建一个实线画笔:如果用户当前选中的是虚线,就创建一个虚线画笔:如果用户当前选中的是点线,
就创建一个点线画笔。这时,读者可能自然就会想到需要一个 switch/case语句来实现不同线型画
笔的创建。实际上,这里并不需要使用该语句。在 WINGDl.h文件中有下面这段代码,定义了一些符
号常量(读者可以在 CGraphicView类 OnLButtonUp函数中构造画笔的那行代码中的符号常量: PS
SOLID上单击鼠标右键,从弹出的快捷菜单中选择【 Go To Definition Of PS SOLID】菜单项,然
后 VC++将打开 WINGDl. h文件,井定位于该常量符号的定义处)。
I! W工NGD1.h
/ * Pen Styles * /
#define PS SOL1D O
#define PS DASH 1 / * -------* /
#define PS一DOT 2 / * ....... * /
#define PS DASHDOT 3 / * -'-'-'-* /
#define PS_DASHDOTDOT 4 /*一....一* /
#define PS NULL 5
#define PS 1NS1DEFRAME 6
#define PS USERSTYLE 7
372 I ~~~
详解
#define PS ALTERNATE 8
#define PS STYLE MASK Ox OOOOOOOF
从中可以看到PS SOLID (实线〉的值本身就是0, PS_DASH (虚线〉就是1, PS_DOT (点线)就是2。
这正好与CGraphicView类的成员变量m_nLineStyle的取值一一对应。这是因为这里我们在设置对话
框中排列的线型顺序正好是按照实线、虚线和点线的顺序来做的。因此,本程序在构造画笔对象时,
可以直接使用m_nLineStyle变量作为线型参数的值。修改CGraphicView类的OnLButtonUp函数中构造
画笔对象的代码,结果是:
CPen pen(m_nLineStyle , m_nLineWidth, RGB(255 , O, O))i
说明:这里线型的排列顺序是故意这么做的。如果读者在实际编程时,线
型顺序并不是这样的,那么在程序中一定妥进行判断后,再创建相应线型的画
笔。
Build并运行Graphic程序,首先打开设置对话框,可以看到初始的选择是实线,如图
10.10所示。这是因为在CGraphicView类的构造函数中将线型变量 (m_nLineStyle)初始设置为0,即
实线。然后程序在构造设置对话框对象之后,将CGraphkView类的线型变量赋给了这个对话框对象的
线型变量,因此该对话框初始显示时,选中的线型是实线。
我们可以选择虚线,然后进行直线的绘制,这时将会绘制虚线效果的直线。如果进行椭圆或矩形的
绘制,这时可以看到它们的边框都是虚线的。程序运行界面如图 10.11所示。并且,当再次打开设
置对话框时,可以发现上一次选择的线型 (这里是虚线)保存下来了。
主j
组宽
Cancel ?-JT一「
JFej干ZJ「一←一一l J J二//!|i i
罐里。真槐.......-_.1-=二节二---l --' ('11始---\(飞',ι___J l
/二 1、、飞--
4
「点编、、 J/
耻·
图 10.10设置对话框的显示(二〉 图 10.11根据用户指定的线型绘制图形的结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -