2012级中国石油大学VC++实验报告
更新时间:2023-09-08 19:25:02 阅读量: 教育文库 文档下载
- 中国石油大学 四六级推荐度:
- 相关推荐
Visual C++
Visual C++面向对象与可视化程序设计实验报告
面向对象与可视化程序设计
实验报告
姓名:郑长明 班级:电气10-2 学号:10053228
1
Visual C++面向对象与可视化程序设计实验报告
目录
实验一Visual C++程序调试实验.............................................................................3 实验二C++类基本语法实验.....................................................................................6 实验三 Windows 图形绘制编程实验.......................................................................8实验四 鼠标和键盘编程实验...................................................................................13实验五 定时器编程实验...........................................................................................18实验六 MFC 消息映射编程实验...............................................................................21实验七 MFC 控件编程实验.......................................................................................25实验八 MFC 鼠标做图编程实验.........................................................................................33
2
Visual C++面向对象与可视化程序设计实验报告
实验一 Visual C++程序调试实验
一、实验目的
(1) 熟悉 Visual C++ 6.0 开发环境;
(2) 掌握在 Visual C++ 6.0 开发环境调试程序的方法。
二、实验报告
(1) 观察三种项目类型对应的程序特点,做出简要说明; Win32 Application
就是普通的常见的窗口应用程序,当然有的界面做得比较个性化,比如圆形的、不规则形状的。他们都是所谓的GUI(Graphics User Interface图形用户接口),我们可以通过鼠标点击来完成控制。
Win32 Console Application(win32控制台应用程序)
往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它; 或者叫CUI(Character User Interface字符用户接口)。 MFC APPWIZARD:
MFC程序向导,微软为了减轻开发人员的工作负担,推出了MFC,MFC其实是一个框架,里面包含了200多个类,MFC比较复杂,MFC框架把基本的功能都实现了,你只是需要把你特殊的功能加到MFC里面, 比如你想建一个windows窗口,MFC APPWIZARD下,MFC中自包含了CWnd串口类,但是win32 application,就是要你自己写一个窗口类,才能用。
(2) 列出C++程序清单,以及程序的运行结果; #include \#include \void narcissus(); void main() {narcissus();} void narcissus() { int x1; int x20; int x2; int x3; int count=0; for (int x=100;x<1000;x++) { x1=x/100; x20=x0; x2=x20/10; x3=x20; if(x1*x1*x1+x2*x2*x2+x3*x3*x3==x)
3
Visual C++面向对象与可视化程序设计实验报告
}
{ count++; cout<<\ } }
cout<<\
(3) 记录调试过程中变量值的变化情况;
4
Visual C++面向对象与可视化程序设计实验报告
(4) 在Visual C++ 6.0 中如何进行程序的跟踪调试;
输完程序后先设置断点,再点F5 GO全速运行,再点 F11step into进入函数体,最后点F10单步执行即可。
(5) 总结实验的心得体会,实验中遇到的困难以及解决的方法等。 首先是建工程的问题,以前总是使用C++source file,现在换别的工程不会建立了; 其次是刚开始不知道怎么调试,不会但不执行和进出主函数操作。后来进行简单学习知道了使用一些快捷键快速调试。 通过本次实验我了解了C++ 3种Win32 Console Application、Win32 Application和 MFC AppWizard(exe)工程的建立。主要学会了如何进行程序调试和观察变量值的变化。
5
Visual C++面向对象与可视化程序设计实验报告
实验二 C++类基本语法实验
一、实验目的
(1) 熟悉 Visual C++ 6.0 开发环境; (2) 熟悉 C++类设计的基本方法;
(3) 掌握 C++类的几个重要成员函数的定义和使用方法; 二、实验内容
创建一个 Employee 类,该类中有字符数组,表示姓名、街道地址、市、省和 邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义 中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。 其中数据成员为保护的,函数为公有的。 (1) 列出C++程序清单,以及程序的运行结果
程序如下:
#include
Employee(char *p,char *q,char *m,char *n,char *r) {
strcpy(name,p); strcpy(address,q); strcpy(shi,m); strcpy(sheng,n); strcpy(youbian,r); }
void changename(Employee a)//这是改变名字的 {
char name1[200]; cout< cout<<\请输入新名字:\ cin>>name1; cout< cout<<\正在修改,请等待...修改完成!\ strcpy(name,name1); } 6 Visual C++面向对象与可视化程序设计实验报告 void display()//这是显示输出的 { cout<<\姓名:\ cout<<\街道地址:\ cout<<\市:\ cout<<\省:\ cout<<\邮编:\ } }; void main() { Employee aa(\小明\公安小区1号\徐州\江苏\ aa.display(); aa.changename(aa); aa.display(); } (2) 总结实验的心得体会,实验中遇到的困难以及解决的方法等 刚开始编写的程序比较复杂,错误很多,不是少个分号就是多个大括号。 其次程序比较不美观,感觉界面很陈旧,所以后来对输出界面做了比较人性化的美化工作。 实验中的一些错误的改正: (1)在类内不允许对所定义的数据成员进行初始化。 (2 )类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数 组、指针和引用等。也可以是对象,即另一个类的对象,可以作为该类的成员,但 自身类的对象是不可以的。 (3 )一般地,在类内先说明公有成员,它们是用户关心的,后面说明私有成员。 (4 )一般将类定义的说明部分或者整个定义部分(包含实现部分)放在一个 头文件中。 (5 )在类的说明部分之后必须加分号“;” 。 本次实现我深刻的学习了C++的基本语法规范,学习了关于类的声明与定义,学会了使用strcmp函数,深刻的理解了C++中类的封装的优越性。 7 Visual C++面向对象与可视化程序设计实验报告 实验三 Windows 图形绘制编程实验 一、实验目的 (1) 熟悉 Visual C++ 6.0 开发环境; (2) 掌握 Windows 图形输出的方法; (3) 理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 二、实验内容 请编写程序,要求如下: (1) 定义一支红色画笔,绘制一个正方形; (2) 用不同颜色的线条连接互不相邻的两个顶点; (3) 用不同颜色的画刷填充用上述方法所形成的图形中的每一个区域。 三、实验报告 (1) 列出图形绘制程序代码清单; #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明 //--------------- 以下初始化窗口类 ---------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; // LPCWSTR lpszClassName =_T(\窗口\//窗口类名 // LPCWSTR lpszTitle=L\//窗口标题名 char lpszClassName[] = \窗口\//窗口类名 char lpszTitle[]= \基本绘图练习\窗口标题名 //窗口类的定义 wndclass.style=0; //窗口类型为缺省类型 wndclass.lpfnWndProc=WndProc; //定义窗口处理函数 wndclass.cbClsExtra=0; //窗口类无扩展 wndclass.cbWndExtra=0; //窗口实例无扩展 wndclass.hInstance=hInstance; //当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ; //窗口采用箭头光标 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色 wndclass.lpszMenuName=NULL; //窗口中无菜单 wndclass.lpszClassName= lpszClassName ; //窗口类名为\窗口\ //--------------- 以下进行窗口类的注册 ------- if(!RegisterClass( &wndclass))//如果注册失败则发出警告 8 Visual C++面向对象与可视化程序设计实验报告 { MessageBeep(0) ; return FALSE ; } //---------------- 创建窗口 ------------------- hwnd=CreateWindow ( // _T(\ lpszClassName, //窗口类名 lpszTitle, //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT, //窗口的高和宽为缺省值 NULL, //此窗口无父窗口 NULL, //此窗口无主菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL //不使用该值 ); //--------------- 显示窗口 ---------------------- ShowWindow( hwnd, nCmdShow) ; //-------------- 绘制用户区 --------------------- UpdateWindow(hwnd); //--------------- 消息循环 ---------------------- while( GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage( &Msg) ; DispatchMessage( &Msg) ; } return Msg.wParam; //消息循环结束即程序终止时将信息返回系统 } //窗口函数 LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { HDC hDC; //定义指向设备的句柄 HBRUSH hBrush; //定义指向画刷的句柄 HPEN hPen; //定义指向画笔的句柄 PAINTSTRUCT PtStr; //定义指向包含绘图信息的结构变量 POINT points1[3],points2[3],points3[3],points4[3]; 9 Visual C++面向对象与可视化程序设计实验报告 points1[0].x=10; points1[0].y=10; points1[1].x=100; points1[1].y=10; points1[2].x=55; points1[2].y=55; points2[0].x=55; points2[0].y=55; points2[1].x=100; points2[1].y=10; points2[2].x=100; points2[2].y=100; points3[0].x=100; points3[0].y=100; points3[1].x=55; points3[1].y=55; points3[2].x=10; points3[2].y=100; points4[0].x=10; points4[0].y=100; points4[1].x=55; points4[1].y=55; points4[2].x=10; points4[2].y=10; switch(message) { case WM_PAINT: //处理绘图消息 hDC=BeginPaint(hwnd,&PtStr); SetMapMode(hDC,MM_ISOTROPIC); //设置映像模式 SetWindowExtEx(hDC,50,50,NULL); SetViewportExtEx(hDC,100,500,NULL); hBrush=(HBRUSH)CreateSolidBrush(RGB(0,100,100)); SelectObject(hDC,hBrush); Polygon(hDC,points1,3); hBrush=(HBRUSH)CreateSolidBrush(RGB(100,0,100)); SelectObject(hDC,hBrush); Polygon(hDC,points2,3); hBrush=(HBRUSH)CreateSolidBrush(RGB(100,100,100)); SelectObject(hDC,hBrush); Polygon(hDC,points3,3); hBrush=(HBRUSH)CreateSolidBrush(RGB(100,100,0)); SelectObject(hDC,hBrush); Polygon(hDC,points4,3); 10 Visual C++面向对象与可视化程序设计实验报告 void CWork8View::OnUpdateOperEllipse(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down1); } void CWork8View::OnUpdateOperLine(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down0); } void CWork8View::OnUpdateOperRectangle(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down2); } void CWork8View::OnOperShow() { // TODO: Add your command handler code here m_show=!m_show; m_down0=FALSE; m_down1=FALSE; m_down2=FALSE; Invalidate(); } 四、运行结果 36 Visual C++面向对象与可视化程序设计实验报告 五、实验总结 本次实验要求熟练掌握MFC菜单资源的使用以及鼠标绘图的方法的知识。首先由于五例题,我先按照课本第十章的例子逐步的尝试,在这个过程里我逐渐掌握了菜单资源的使用方法。结合以前的MFC绘图程序,添加了鼠标单击与鼠标移动的响应函数实现绘图功能,通过对按钮的COMMAND消息响应控制绘图类型,完成之后自己又添加了按钮对UPDATE_COMMAND_UI消息的响应。最后又添加了清除按钮。这次实验的要求很高,结合了之前的全部MFC实验内容,提高了理论与实验之间的联系,让我的综合能力得到了很大的提高 37 Visual C++面向对象与可视化程序设计实验报告 实验六 MFC 消息映射编程实验 一、实验目的 (1) 熟悉Visual C++ 6.0 开发环境; (2) 掌握消息映射机制的基本原理和手工添加消息映射的方法; (3) 熟练掌握在Visual C++ 6.0 开发环境调试程序的方法。 二、实验内容 设计 MFC 应用程序,手工添加消息映射,实现下面的功能: (1)按下CTRL 键,拖动鼠标绘制矩形; (2)按下SHIFT 键,拖动鼠标绘制椭圆。 三、程序代码 #include #define MAX_BUBBLE 250 class CDemoApp: public CWinApp { public: BOOL InitInstance(); }; CDemoApp ThisApp; // 全局应用程序对象 class CDemoWnd: public CFrameWnd { private: CRect m_rectBubble[MAX_BUBBLE]; CRect m_rectBubble1[MAX_BUBBLE]; int m_nBubbleCount; int m_nBubbleCount1; public: CDemoWnd(){ m_nBubbleCount = 0;m_nBubbleCount1 = 0;} int m_X0; int m_Y0; int m_X1; int m_Y1; protected: LRESULT OnPaint(WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam); LRESULT OnLButtonUp(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP(); 21 Visual C++面向对象与可视化程序设计实验报告 }; BEGIN_MESSAGE_MAP(CDemoWnd, CFrameWnd) ON_MESSAGE(WM_PAINT,OnPaint) ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove) ON_MESSAGE(WM_LBUTTONUP,OnLButtonUp) END_MESSAGE_MAP() LRESULT CDemoWnd::OnPaint(WPARAM wParam, LPARAM lParam) { CPaintDC dc(this); dc.SelectStockObject(LTGRAY_BRUSH); for(int i=0; i LRESULT CDemoWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam) { m_X0 = m_X1 = LOWORD(lParam); m_Y0 = m_Y1 = HIWORD(lParam); return 0; } LRESULT CDemoWnd::OnMouseMove(WPARAM wParam, LPARAM lParam) { CClientDC dc(this); dc.SelectStockObject(WHITE_PEN); dc.SelectStockObject(WHITE_BRUSH); if((wParam & MK_LBUTTON) && (wParam & MK_CONTROL)) { dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); } if((wParam & MK_LBUTTON) && (wParam & MK_SHIFT)) { dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1); } m_X1 = LOWORD(lParam); m_Y1 = HIWORD(lParam); dc.SelectStockObject(BLACK_PEN); dc.SelectStockObject(GRAY_BRUSH); if((wParam & MK_LBUTTON) && (wParam & MK_SHIFT)) 22 Visual C++面向对象与可视化程序设计实验报告 { dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); } if((wParam & MK_LBUTTON) && (wParam & MK_CONTROL)) { dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1); } return 0; } LRESULT CDemoWnd::OnLButtonUp(WPARAM wParam, LPARAM lParam) { CClientDC dc(this); CRect rect(m_X0,m_Y0,m_X1,m_Y1); if(wParam & MK_SHIFT) { m_rectBubble[m_nBubbleCount] = rect; m_nBubbleCount++; } if(wParam & MK_CONTROL) { m_rectBubble1[m_nBubbleCount1] = rect; m_nBubbleCount1++; } m_X1 = LOWORD(lParam); m_Y1 = HIWORD(lParam); dc.SelectStockObject(BLACK_PEN); dc.SelectStockObject(GRAY_BRUSH); if(wParam & MK_CONTROL) { m_rectBubble[m_nBubbleCount] = rect; m_nBubbleCount++; } if(wParam & MK_CONTROL) { m_rectBubble1[m_nBubbleCount1] = rect; m_nBubbleCount1++; } InvalidateRect(0, 1); return 0; } BOOL CDemoApp::InitInstance() 23 Visual C++面向对象与可视化程序设计实验报告 { } CDemoWnd *pFrame = new CDemoWnd(); pFrame->Create(0,_T(\ pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd = pFrame; return TRUE; 四、运行结果 五、实验总结 本次实验学习了手工添加消息映射的方法,对消息映射有了更深入地认 识,同时也学会了两种用鼠标绘图的方法。其中,出现了反向移动鼠标后,之前画的图形会留下一片空白,我采用了画泡泡的方法,设定一个数组来记录每次的图形,这样就可以很好的保护好之前画的图形了。第一次把按键弄反了,后来交换一下变量名就可以了。同时这次实验使我了解了用MFC绘图与用API绘图的不同之处。 24 Visual C++面向对象与可视化程序设计实验报告 实验七 MFC 控件编程实验 一、实验目的 (1) 熟悉Visual C++ 6.0 开发环境; (2) 掌握MFC 环境下标准控件的使用方法; (3) 熟练掌握在Visual C++ 6.0 开发环境调试程序的方法。 二、实验内容 创建如图所示的应用程序,在“形状”列表框中选择要绘制的图形,在“笔颜 色”下拉列表框中选择画笔的颜色,在“刷子颜色”下拉列表框中选择画刷的颜色, 在“线型”组框中选择画笔的线型,在“填充类型”中选择画刷填充类型,单击“绘图”按钮 在“绘图设置”编辑框中显示选择的绘图设置选项,单击“退出”按钮退 出程序。 三、程序代码 // testDlg.cpp : implementation file #include \#include \#include \ #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { 25 Visual C++面向对象与可视化程序设计实验报告 public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTestDlg dialog CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) 26 Visual C++面向对象与可视化程序设计实验报告 : CDialog(CTestDlg::IDD, pParent) { //{{AFX_DATA_INIT(CTestDlg) m_pen = -1; m_brush = -1; m_Output = _T(\ //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDlg) DDX_Control(pDX, IDC_LIST1, m_list); DDX_Control(pDX, IDC_COMBO2, m_cb2); DDX_Control(pDX, IDC_COMBO1, m_cb1); DDX_Radio(pDX, IDC_RADIO1, m_pen); DDX_Radio(pDX, IDC_RADIO5, m_brush); DDX_Text(pDX, IDC_OUTPUT, m_Output); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTestDlg, CDialog) //{{AFX_MSG_MAP(CTestDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_CHANGE(IDC_OUTPUT, OnChangeOutput) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1) ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1) ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2) ON_CBN_EDITCHANGE(IDC_COMBO2, OnSelchangeCombo2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTestDlg message handlers BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); 27 Visual C++面向对象与可视化程序设计实验报告 // Add \ // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_list.AddString(\ m_list.AddString(\ m_list.AddString(\ m_list.AddString(\ m_cb1.AddString(\ m_cb1.AddString(\ m_cb1.AddString(\ return TRUE; // return TRUE unless you set the focus to a control } void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else 28 Visual C++面向对象与可视化程序设计实验报告 { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CTestDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CTestDlg::OnChangeOutput() { // TODO: If this is a RICHEDIT control, the control will not 29 Visual C++面向对象与可视化程序设计实验报告 // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } CString msg1; CString msg2; CString msg3; void CTestDlg::OnSelchangeList1() { // TODO: Add your control notification handler code here m_list.GetText(m_list.GetCurSel(),msg1); } void CTestDlg::OnSelchangeCombo1() { // TODO: Add your control notification handler code here m_cb1.GetLBText(m_cb1.GetCurSel(),msg2); } void CTestDlg::OnSelchangeCombo2() { // TODO: Add your control notification handler code here m_cb2.GetLBText(m_cb2.GetCurSel(),msg3); } void CTestDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); // DDX:界面控件的值传给内部变量 m_Output=\形状:\m_Output+=msg1; m_Output+=\ 笔颜色:\m_Output+=msg2; m_Output+=\ 刷子颜色:\m_Output+=msg3; m_Output += \ 线型:\ switch(m_pen) { case 0: 30 Visual C++面向对象与可视化程序设计实验报告 m_Output += \ break; case 1: m_Output += \ break; case 2: m_Output += \ break; case 3: m_Output += \ break; } m_Output += \ 填充类型:\switch(m_brush) { case 0: m_Output += \break; case 1: m_Output += \break; case 2: m_Output += \ break; case 3: m_Output += \ break; } UpdateData(FALSE); // DDX:内部变量的值传给界面控件 } 各个控件的属性设置: 控件 ID 类向导: 类向导:Member Type 形状/列表框 IDC_LIST1 CListBox m_list CString msg1 笔颜色/组合框 IDC_COMBO1 CComboBox m_cb1 CString msg2 刷子颜色/组合IDC_COMBO2 CCmoboBox m_cb2 框 CString m_msg2 线型/组框 IDC_RADIO1 int m_pen 31 Visual C++面向对象与可视化程序设计实验报告 IDC_RADIO5 Int m_brush 填充类型/组框 绘图设置/编辑框 绘图/按钮 IDC_OUTPUT IDOK CString m_Output ON_IDOK:BN_CLICKED 四、运行结果 五、实验总结 本次实验中用到了列表框、组合框、组框、编辑框、按钮等控件,实验要求对这些控件进行组合使用。通过这次实验使我对MFC控件的工作机制有了更深的认识,以及建立类向导有了进一步的掌握。实验过程中在显示列表框和组合框的内容时,我选择给列表框、组合框定义了一个Cstring类型的值,输出时将这个值赋值给编辑框的值实现了成员的输出,通过这个解决问题的过程,我对控件的工作机制有了更深的认识。 32 Visual C++面向对象与可视化程序设计实验报告 实验八 MFC 鼠标做图编程实验 一、实验目的 (1) 熟悉Visual C++ 6.0 开发环境; (2) 掌握应用MFC 类库编写鼠标绘图程序的方法; (3) 掌握MFC 环境中绘图函数的使用方法。 二、实验内容 创建一个单文档应用程序,实现鼠标的绘图功能。要求: (1) 创建一个工具栏,有线段、矩形、椭圆三个按钮; (2) 绘图前,选择工具栏上的按钮,确定图形的形状。按下鼠标左键,开始绘 图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标的移动在屏幕 上实时绘制图形,放开鼠标左键,确定最后的图形,绘制在屏幕上。 三、程序代码 在work8View.h中声明: class CWork8View : public CView {protected: CWork8View(); DECLARE_DYNCREATE(CWork8View) // Attributes public: CWork8Doc* GetDocument(); DWORD m_i; int m_X0; int m_X1; int m_Y0; int m_Y1; bool m_down0; bool m_down1; bool m_down2; bool m_show; // Operations 在work8View.h中的相关代码: CWork8View::CWork8View() {// TODO: add construction code here m_down0=FALSE; m_down1=FALSE; m_down2=FALSE; m_show=TRUE; } CWork8View::~CWork8View() {} BOOL CWork8View::PreCreateWindow(CREATESTRUCT& cs) 33 Visual C++面向对象与可视化程序设计实验报告 { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CWork8View drawing void CWork8View::OnDraw(CDC* pDC) { CWork8Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->SetTextColor(RGB(0,0,255)); pDC->TextOut(10,10,\点击相应按钮画对应的图形,点击“清除”清空窗口\} void CWork8View::OnOperEllipse() // { // TODO: Add your command handler code here m_i=1; m_down1=TRUE; m_down0=FALSE; m_down2=FALSE; m_show=TRUE; Invalidate(); } void CWork8View::OnOperLine() { // TODO: Add your command handler code here m_i=0; m_down0=TRUE; m_down1=FALSE; m_down2=FALSE; m_show=TRUE; Invalidate(); } void CWork8View::OnOperRectangle() { // TODO: Add your command handler code here m_i=2; m_down2=TRUE; m_down0=FALSE; m_down1=FALSE; 34 Visual C++面向对象与可视化程序设计实验报告 m_show=TRUE; Invalidate(); } void CWork8View::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_X0=m_X1=point.x; m_Y0=m_Y1=point.y; CView::OnLButtonDown(nFlags, point); } void CWork8View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnMouseMove(nFlags, point); CClientDC dc(this); dc.SelectStockObject(WHITE_PEN); dc.SelectStockObject(WHITE_BRUSH); if((nFlags & MK_LBUTTON)&&m_show) { if(m_i==1) dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); else if(m_i==0) {dc.MoveTo(m_X0,m_Y0); dc.LineTo(m_X1,m_Y1);} else if(m_i==2) dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1);} m_X1 = point.x; m_Y1 = point.y; dc.SelectStockObject(BLACK_PEN); dc.SelectStockObject(GRAY_BRUSH); if((nFlags & MK_LBUTTON )&&m_show) { if(m_i==1) dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); else if(m_i==0) {dc.MoveTo(m_X0,m_Y0); dc.LineTo(m_X1,m_Y1);} else if(m_i==2) dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1); } } 35
正在阅读:
2012级中国石油大学VC++实验报告09-08
发展汉语(第二版)中级写作-第7课11-18
小米手机顾客参与型营销管理思考04-08
6320 JH106H 01(6320ZCd 6重油)05-04
2014步步高二轮复习化学专题十七09-30
手机键盘测试规范06-03
AAA投资商铺与投资住宅的区别(转)05-20
质量通病防治措施、应急预案 - 图文01-13
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 石油大学
- 中国
- 实验
- 报告
- 2012
- VC
- 红星国际星城31米高支模施工方案及计算书 - secret
- 复变函数试题库
- 个体工商户和有限责任公司的区别
- 创建模范职工之家
- 近3年2015-2017各地高考数学真题分类专题汇总--概率统计
- 实验室制取二氧化碳的研究及教学反思 - 图文
- FMEA试题
- 2017年重庆市高等职业院校技能大赛嵌入式技术与应用开发赛项公开赛题
- 国网考试电力系统继电保护题库资料
- 安徽财经大学-经济持续下滑下银行信贷风险及对策研究-开题报告 - 图文
- 华南理工大学数值分析试题A
- 西南位育2019上海公校试卷:第一学期初三语文期中考试试题卷
- 2017 AMC 8 考题及答案
- 吉林省2017年咨询工程师《项目决策分析与评价》考试试题
- 锅炉炉膛水平烟道尾部烟道人孔门封闭签证
- Reyly - y市场营销学教案表
- 2019年中国光电新材料产业深度调研与投资前景评估报告(定制版)目录
- 东方D600B型汽轮机调节保安系统 - 图文
- 北京商丘商会第一届理事会第三次会议2 - 图文
- 2015尔雅《舞蹈鉴赏》课后题答案