📄 10.2.1 设置线宽.txt
字号:
Build运行 Graphic程序,单击【绘图设置】菜单,即可显示设置对话框,如图
10.6所示。
图 10.6设置对话框的显示(一〉
当用户在线宽编辑框中输入线宽值并确定此操作后,程序应把这个线宽值保存起来,然后随后的绘
图都使用这个线宽值来设置线的宽度。因此为 CGraphicView类添加一个私有的成员变
量:m_nLineWidth ,类型也是 UINT,用来保存用户输入的线宽,并在 CGraphicView类的构造函数
中将其初始化为0。
当然,在用户输入线宽后,应该是在用户单击【OK】按钮后才保存这个线宽值,如果用户选择的是
【Cancel】按钮,并不需要保存这个线宽值。因此在 CGraphicView类的 OnSetting函数中需要判断
一下用户关闭设置对话框时的选择,如果选择的是【OK】按钮,则保存用户输入的线宽值。因此,
需要对上述例 10-6所示的OnSetting函数进行修改,结果代码如例 10-8所示。
例10-8
void CGraphicview: :OnSetting() CSettingDlg dlg;
if(工DOK==dlg.DoModal())
ffi_nLineWidth=dlg.m_nLineWidth;
然后在构造画笔对象时,其宽度就可以利用ffi nLineWidth这个变量来代替了。因此,
~.... I 369
第10
将CGraphicView类OnLButtonUp函数中先前创建画笔的代码(即上述例 10-5所示代码中的第7行代
码〉修改为下面这行代码:
CPen pen(PS_SOLID,m_nLineWidth, RGB(255 , 0 , 0));
在程序运行时,当用户设置线宽后,在下一次绘图时,就会以用户输入的线宽创建画笔,那么随后
的绘图就是按照用户设置的线宽来绘制的。
Build并运行 Graphic程序,单击【绘图\设置】菜单工页,在弹出的设置对话框中指定新线宽,例
如: 10,并单击【OK】按钮关闭设置对话框。然后再绘图,可以发现程序使用的是用户指定的新线
宽来绘制图形的。
但是,当我们再次打开设置对话框时,线宽编辑框的值又变回O了。一般来说,当再次回到这个设置
对话框时,应该看到上次设置的值,但这里的情况并不是这样的。我们回头看看上面例 10-8所示的
OnSetting函数的实现代码,可以看到设置对话框对象: dlg是一个局部对象。当再次单击【绘图\设
置】菜单项时,即再次调用OnSetting函数时,又将重新构造 dlg这个设置对话框对象。因此,该对
象的所有成员变量都将被初始化,而 CSettingDlg对象的构造函数代码如例 10-9所示。
i?ll 10-9
CSettingDlg: :CSettingDlg(CWnd* pParent I *=NULL* / ) CDialog(CSettingDlg::IDD, pParent)
11 {{AFX_DATA_INIT(CSettingDlg)
m_nLineWidth = 0 ;
II }}AFX_DATA_INIT
由此可知, m_nLineWidth变量的值又被重新初始化为0。因此,当我们再次打开设置对话框时,线
宽的值又变为O了。
为了解决这个问题,当CSettingDlg对话框Cdlg)对象产生之后,应该将CGraphicView 类中保存的用
户先前设置的线宽再传回给这个设置对话框。修改后的 OnSetting函数代码如例 10-10所示,其中
加灰显示的代码就是新增的代码。
i?ll 10-10
void CGraphicView : :OnSett工ng ( )
CSettingDlg dlg;
dlg.m_nLineWidth = m_nLineWidth;
if(IDOK==dlg . DoModal ())
{
m_nLineWidth=dlg.m_nLineWidth;
看到这里,有些读者可能会产生这样的疑问:我们知道一旦程序执行到 OnSetting函数的右大括号外
的时候,dlg对象的生命周期也就终止了,因此它的成员变量m nLineWidth
主且主
VCI I深λ详解
的值就丢失了。但想不通为什么CGraphicView类的成员变量m r止ineWidth保存的值会一直存在?这
是因为 CGraphicView类对象的生命周期从应用程序产生时就开始了,直到应用程序结束,
CGraphicView类的对象才终止。因此,在OnSetting函数中,当设置对话框被关闭后, CGraphicView
类对象仍存在,它的成员变量m nLineWidth所保存的值也是一直存在的。
读者可以自行测试一下修改后的 Graphic程序,先在设置对话框中设置一个线宽值,然后进行绘图
操作;接着再次打开设置对话框,这时将会发现线宽编牺框中显示的是上次设置的线宽值。这就是说,
此时程序已经把用户上次设置的线宽值保存下来了。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -