⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.2.1 设置线宽.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 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 + -