![计算机图形学](https://wfqqreader-1252317822.image.myqcloud.com/cover/713/680713/b_680713.jpg)
1.3 Visual C++简单程序设计
本节重点介绐程序中的菜单及对话框的设计。
1.3.1 菜单的设计
(1) 单击“ResourceView”标签,选择“Menu”项,双击其下的“IDR_MAINFRAME”,如图1-13所示,进入菜单编辑界面。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0008-342.jpg?sign=1739259569-XolttO7UFID03rhgW0UJ9K0ODT8lRcRh-0-a86f8c03e6d78ecb57cb0c781323c8ae)
图1-13 菜单编辑界面
(2) 在右边菜单空栏上单击鼠标右键,选择“属性”选项,弹出如图1-14所示对话框。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0009-350.jpg?sign=1739259569-ns4oDQRdiRwseacgjudygkC5xhy2FK1v-0-71825c0f0fb7447ac4e7e02c8f2dcf8f)
图1-14 “菜单项目属性”对话框
(3) 在“图形”菜单的子菜单空栏处单击鼠标右键,选择“属性”选项,弹出如图1-15所示对话框,设置其子菜单属性。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0009-354.jpg?sign=1739259569-MAKnKR25woeZj7pbzaTZyk3GJDxtxJxR-0-85e47e48781e68cd22aca71d56950777)
图1-15 子菜单属性设置
(4) 在菜单编辑界面处单击鼠标右键,选择“建立类向导”选项,操作如图1-16所示。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0009-358.jpg?sign=1739259569-1qpvzBw9Sqp71zV6LQJNsZpHNrM7XJyG-0-45a9c00a25aad55a2c85b167844fe174)
图1-16 建立类向导
(5) 在弹出的类向导对话框中,进行如图1-17所示的选择。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0009-370.jpg?sign=1739259569-OUYwuF8jkuFNUvgY6oUjGQpqvQcPjxLJ-0-4ebde14f8aa40f64f33d806c8c599f33)
图1-17 MFC ClassWizard 对话框
(6) 单击“Add Function”按钮,弹出如图1-18所示对话框,添加一个成员函数。
(7) 单击“OK”按钮,回到如图1-17所示界面,单击“Edit Code”按钮,进入如图1-19所示代码编辑界面。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0010-386.jpg?sign=1739259569-5dRjUCftWd13t5ZCclKrB248ZdEzTuqo-0-0ef97f169c7e924ecd48b4d32c7e3b30)
图1-18 添加成员函数对话框
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0010-387.jpg?sign=1739259569-nXM2OxFkykTCXqQKsCWLDOjc4A2Hf2ag-0-f03740f0bba10ca57de8590263dc132c)
图1-19 代码编辑界面
在“// TODO: Add your command handler code here”处输入自己的代码,例如:
CDC ∗pDC=GetDC(); pDC->MoveTo (0,0); pDC->LineTo (100,100);
单击工具栏处“!”按钮,程序开始运行,然后单击应用程序“图形”菜单下的“直线”子菜单,就可以绘制出一条直线。
1.3.2 对话框的设计
如果直线段的起点坐标与终点坐标需要用户输入,则可使用对话框。
(1) 建立新对话框
单击“ResourceView”标签,选择“Dialog”,并按鼠标右键,选择“插入Dialog”选项(见图1-20),进入对话框编辑界面(见图1-21)。
(2) 添加输出图形的控件
扩大对话框,并在图1-21中的控件工具内选择“图像”控件,拖入对话框中,按鼠标右键,选择“属性”(见图1-22)选项,弹出属性对话框(见图1-23),修改ID值为IDC_GRAPHIC,选择“类型”中的位图,使该控件用于图形的显示。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0010-398.jpg?sign=1739259569-JHSqRusW8pSvvx3QjDU2aoSuhMdHBX95-0-281ab1bb4d15ad66c0e35ab9b21c9434)
图1-20 插入对话框
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0011-414.jpg?sign=1739259569-95GRBDqStwNSDXYvtHHBc5J2enPXJi4M-0-25f25258d6c479dca3cd752a577e7086)
图1-21 对话框编辑界面
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0011-415.jpg?sign=1739259569-RFXixywZZD3f0n8KjyOKtPsp0rn8Tw81-0-de1ea8519dce2bb820cb4edd28a45e65)
图1-22 对话框编辑界面
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0011-418.jpg?sign=1739259569-Dy0prDMX0e7Al3a9OlQyQt9r1A3D0vH0-0-ef0d3188b70ff2ae23466fd1cfe708f7)
图1-23 添加显示图形控件
(3) 添加与修改按钮
在控件工具内选择“按钮”控件,拖入对话框中,按鼠标右键,选择“属性”选项,修改ID值为IDC_LINE,标题改为“直线”。同时,删除已有的“确定”按钮,并将“取消”按钮的标题改为“退出”,如图1-24所示。
(4) 添加静态文本与编辑框
在控件工具内选择“静态文本”控件,拖入对话框中,按鼠标右键,选择“属性”选项,标题改为“直线起点(x,y)”。再拖入一个静态文本,标题为“直线终点(x,y)”。
在控件工具内选择“编辑框”控件,拖入对话框中,共拖入4个编辑框,如图1-25所示。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0011-422.jpg?sign=1739259569-5jZHaudCHysHmD5UPqLIcdYA0blVzKGU-0-a6c84206215a0abd847e7450c845c073)
图1-24 添加与修改按钮
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0011-423.jpg?sign=1739259569-BKBdaen64OtUriBjuNIU9oZXt5OTW7kT-0-bca82c132867f9b27904e9a26e76c624)
图1-25 添加静态文本与编辑框
(5) 建立新对话框类
完成对话框内的控件设计后,双击对话框,出现如图1-26所示添加新类的对话框,单击“OK”按钮(默认值是建立一个新类),如图1-27所示给新类添加信息,除了类名是用户输入外(这里输入的是Cline),其他可使用默认值。最后单击“OK”按钮,完成新对话框的建立。这时在Class name区中增加了一个新类line,在FileView区中增加了一个新文件line.cpp和line.h。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0012-431.jpg?sign=1739259569-efgHUVMrrdM9IJ8pv6WcEgve1GPb8fer-0-24aaaa0138078079abf076dc453d2989)
图1-26 添加新类的对话框
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0012-434.jpg?sign=1739259569-hFLhFFKiNAiz4hFsqXmMafcM3hfW3tu7-0-4bc97bb6cfe645ba12e8ef3477fb24f8)
图1-27 建立新类对话框
(6) 建立控件的成员数据
在“查看”菜单选择“建立类向导”,出现如图1-28所示的对话框,选择“Member Variables”标签,再选择第1个编辑框,单击“Add Variable”按钮,出现如图1-29所示对话框。在“Member variable name”下方,输入编辑框对应的成员变量名(这里输入的是m_x0)。在“Variable type”下方,选择类型为“int”。其他编辑框进行同样操作,最后结果如图1-30所示。单击“确定”按钮,完成成员变量的定义。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0012-446.jpg?sign=1739259569-OKz27AYCc1llF8EDqiObACuP9vNL3cdA-0-ccbee283ddd0b55a30b1835e88981d21)
图1-28 建立成员变量
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0013-461.jpg?sign=1739259569-gRcVedRaZcU49PR3bFrgRoh7bUZqMl8P-0-e116b7721f525c875f2b794ad53ebd2a)
图1-29 定义成员变量
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0013-472.jpg?sign=1739259569-9k6LlpRlxAuGTlysThMUgei207akGvsF-0-08b6376a4a07a960c64ce1dcfc8d4a43)
图1-30 最终的成员变量
(7) 获取编辑框的数据
当用户在编辑框输入数据或改变编辑框中的数据时,需要将控件中的数据传递给相应的成员数据,采用UpdateData函数实现。
双击第一个编辑框,出现如图1-31所示对话框,OnChangeEdit1( )为编辑框改变值的响应函数,单击“OK”按钮,进入程序编辑窗口(见图1-32),在编辑框的响应函数写入如下代码:
UpdateData(true);
其他3个编辑框按同样方式处理。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0013-480.jpg?sign=1739259569-3S6vz8T2Wn7zTp1gFMIss2BigTMmd6PE-0-54f25b68fc35a4745314732189faa22c)
图1-31 生成编辑框的响应函数
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0013-477.jpg?sign=1739259569-49eBeKa2hDci8FhOWCIopCOLFoUpeYjc-0-af0c64a3c3c5494643b1ee654c315efc)
图1-32 编辑框响应函数
(8) 按钮响应函数
双击“直线”按钮,出现响应该按钮的成员函数名(见图1-33),单击“OK”按钮后,在line对话框类文件line.cpp中增加了一个空内容的OnButtion1( )成员函数(见图1-34),由用户完成内容。例如,输入如下代码,实现直线的绘制:
CDC ∗pDC=GetDC(); pDC->MoveTo(m_x0,m_y0); pDC->LineTo(m_x1,m_y1);
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0014-491.jpg?sign=1739259569-cAO857Mrl8keFlP7PuBykZXQGE5ZhMLs-0-ebea538fce0782e5a25dc68e77e40a6e)
图1-33 建立成员函数
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0014-492.jpg?sign=1739259569-pCMfHozRxDb66eEWsRG7ivYfIP6ftD1J-0-dcbc83a4a42232c7e1af7532c32ad144)
图1-34 按钮响应函数
(9) 通过菜单项显示对话框
在“FileView”标签中,打开graphicView.cpp文件,在void CGraphicView::OnLine( )函数中编写如下代码:
Cline dlg; //定义对话框类对象dlg dlg.DoModal( ); //通过对话框类对象dlg的成员函数DoModal( )显示对话框
由于程序中使用了对话框类Cline,因此需要在graphicView.cpp前面包含该类的定义文件:
#include "line.h"
程序运行结果如图1-35所示。
![](https://epubservercos.yuewen.com/336AB8/3590447303812901/epubprivate/OEBPS/Images/Figure-0014-500.jpg?sign=1739259569-L95nUIzuaMoVNF2Kh6dA8HxdDUMG7ywT-0-1dcafd723661d0c9e29fea6efd7165ea)
图1-35 程序运行结果