VC MFC编程实例

合集下载

VS2008下计算器的MFC编程实现..

VS2008下计算器的MFC编程实现..

VS2008下计算器的MFC编程实现简单的计算器编程,完全在VS2008下实现,主要用于熟悉VS2008的功能。

谨以此分享给和我一样初学MFC的朋友们。

STEP1:页面设计1.新建工程首先打开Visual Studio2008,选择MFC应用程序,设定好路径和工程名(这里我设置工程名为为“Calculator”)。

这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”,其他选项默认即可。

之后我们可以点击完成便看到以下界面:此时我们把当前页面上原配的控件按Delete全部清除(如下图)2.添加控件接着我们按照MFC自带的控件选项进行我们本次计算器的控件添加。

点击右侧的工具栏按钮(以下是控件)我们在原先清空的界面中依次用上图控件画出一个基本的计算器页面(如下图)。

影响用户的心情。

3.修改空间ID和Caption上图各控件类型如下:Edit ControlButtonGroup Box:选择其中一个GroupBox,右键单击,选择[属性]。

在右边显示属性对话框。

每个控件“属性”都有属于它自己的ID,默认的Group Box的ID为IDC_STATIC,而且Cap当然我们为了“顾名思义”,对控件ID进行修改成我们容易辨认的(也可以不改),添加完控件并修改ID。

4个Group Box的ID分别修改为IDC_STATIC_FRAME ,IDC_STATIC_IN, IDC_STATIC_RESULT, IDC_STATIC_BUTTON 控件Edit Control和Button也按相同的办法处理。

ID设置完成可以在“Resourse.h”中查看。

完成修改ID后,就需给控件添加消息响应了。

在属性对话框的上方点击闪电“”图标,添加控件事件。

如对于按钮“”,点击“”点击下拉键头,添加控件事件,页面自动切换到代码的编辑页面,如“添加OnBnClickedButton5”MFC默认下了的响应信息都为On_开头。

VC++MFC编程3

VC++MFC编程3

return (int)sqrt(dx*dx+dy*dy); } 第八步:编译运行程序员 函数原型: public: void DrawCircle(CDC* pDC, CPoint cenp, CPoint ardp); int ComputeRadius(CPoint cenp,CPoint ardp); 具体操作方法:用鼠标右键单击视图类, 选择“ 选择“Add Member Function…”,如下图所 Function…”,如下图所 示。分别添加上述两个成员函数,分别用 于画圆和计算圆的半径。
第一步:建立MouseSpring工程文件; 第一步:建立MouseSpring工程文件; 第二步:向视图类中添加自定义的成员变量 用鼠标右键单击视图类,选择“ 用鼠标右键单击视图类,选择“Add Member Variable…”, Variable…”,添加下面三个成员变量。 proctected : CPoint m_bO; // 圆心 CPoint m_bR; //圆上的点 //圆上的点 int m_ist; //圆心与圆周上点的区别,m_ist=0, //圆心与圆周上点的区别,m_ist=0, 表示鼠标左击点为圆心, //m_ist=1,表示鼠标左击点为圆周上的 //m_ist=1,表示鼠标左击点为圆周上的 点 操作方法如下图所示,分别添加上述三个成员变量。
第五步:在视图类的OnDraw()函数中加入下列代码,实 第五步:在视图类的OnDraw()函数中加入下列代码,实 现视图绘图。 void CMouseSpringView::OnDraw(CDC* pDC) { CMouseSpringDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDCpDC->SelectStockObject(NULL_BRUSH);//选择预定义对象 DrawCircle(pDC,m_bO,m_bR); //调用自定义的成员函数画圆 //调用自定义的成员函数画圆 }

VC中MFC应用的若干个小例子2

VC中MFC应用的若干个小例子2

int Str2Hex(CString str, UINT32* data)实现的功能是将str(16进制)->数字。

比如11转换成17。

21转换成33。

Visual C++通用范例开发金典\Visual C++通用范例开发金典ch011. IDC_STATIC1:void CCStatic2Dlg::OnStatic1(){// TODO: Add your control notification handler code hereCString str;GetDlgItem(IDC_STATIC1)->GetWindowText(str);if("Hello,World!"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("Visual C++!");}if("Visual C++!"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("I like C++");}if("I like C++"==str){GetDlgItem(IDC_STATIC1)->SetWindowText("Hello,World!");}}2.BOOL CRadio_Button1Dlg::OnInitDialog()中的代码:CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO1);3.BOOL CButton3Dlg::OnInitDialog()中的代码:CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO3);CButton *ptn=(CButton *)GetDlgItem(IDC_CHECK1);ptn->SetCheck(1);在void CButton3Dlg::OnOK(){// TODO: Add extra validation hereCString str,strCtrl;int i;str="您的年级:";UINT nID1=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);GetDlgItemText(nID1,strCtrl);str=str+strCtrl;str=str+"\n你最喜欢的课程:";UINT nID2[4]={IDC_CHECK1,IDC_CHECK2,IDC_CHECK3,IDC_CHECK4};CButton *ptn;for(i=0;i<4;i++){ptn=(CButton *)GetDlgItem(nID2[i]);if(1==ptn->GetCheck()){ptn->GetWindowText(strCtrl);str=str+strCtrl;str=str+" ";}}MessageBox(str);// CDialog::OnOK();}4.void CCstatic1Dlg::OnOK(){if (static1.m_hWnd){static1.DestroyWindow();}else{static1.Create("生成的新的静态文本框",WS_CHILD|WS_VISIBLE,CRect(0,0,200,30),this,11);}// CDialog::OnOK();}5.void CCShrinkView::OnShrink(){// TODO: Add your command handler code hereCShrink_Dlg* pt1=new CShrink_Dlg;pt1->DoModal();}void CShrink_Dlg::OnButton1(){// TODO: Add your control notification handler code hereCString str;GetDlgItemText(IDC_BUTTON1,str);if("收缩<<"==str)SetDlgItemText(IDC_BUTTON1,"扩展>>");elseSetDlgItemText(IDC_BUTTON1,"收缩<<");static CRect rectLarge;static CRect rectSmall;if(rectLarge.IsRectNull()){CRect temp;GetWindowRect(&rectLarge);GetDlgItem(IDC_SHRINK)->GetWindowRect(&temp);rectSmall.left=rectLarge.left;rectSmall.top=rectLarge.top;rectSmall.right=rectLarge.right;rectSmall.bottom=temp.top;}if(str=="收缩<<"){SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NO ZORDER);}else{SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NO ZORDER);}}6.BOOL CCEdit_6Dlg::OnInitDialog()中的:CTime time;time=CTime::GetCurrentTime();m_time=time.Format("%x--%X");UpdateData(FALSE);void CCEdit_6Dlg::OnTimer(UINT nIDEvent){CTime time;time=CTime::GetCurrentTime();m_time=time.Format("%Y-%m-%d %H:%M:%S");UpdateData(FALSE);CDialog::OnTimer(nIDEvent);}7.只有一个例子,其它的仿照void CCEdit4Dlg::OnGreenRadio3(){colour = RGB(0,255,0);m_edit.SetFocus();}8.class CColorEdit : public CEdit自己新创了一个类HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor){// TODO: Change any attributes of the DC hereCDC* dc = GetDC(); //获取画布对象CRect rect;GetClientRect(rect); //获取客户区域rect.InflateRect(3,3,3,3);//将客户区域增大3个像素CBrush brush (m_color);//创建画刷dc->FrameRect(rect,&brush);//绘制边框// TODO: Return a non-NULL brush if the parent's handler should not be called return NULL;}void CColorEdit::SetColorEdit(COLORREF color){m_color=color;}//m_color是CColorEdit的一个成员函数BOOL CCEdit_5Dlg::OnInitDialog()中的m_edit1.SetColorEdit(RGB(255,0,0));m_edit2.SetColorEdit(RGB(0,0,255));9.void CCEdit_1Dlg::OnButton1(){// TODO: Add your control notification handler code hereCString str;UpdateData(TRUE);if((strcmp(m_name,"张三")==0)&&(strcmp(m_password,"1113")==0)) str="密码正确,登陆成功!";else if((strcmp(m_name,"")==0)||(strcmp(m_password,"")==0)) str="请输入用户名或密码:";elsestr="用户名或密码错误:";MessageBox(str);}10.void CCEdit_2Dlg::OnChangeEdit1(){UpdateData(TRUE);// m_write="d\nyyy";m_read=m_write;UpdateData(FALSE);}11.CSpinButtonCtrl m_spinage;BOOL CSpinButtonDlg::OnInitDialog()中的:m_spinage.SetRange(1,100);m_spinage.SetBase( 0 );void CSpinButtonDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) {NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;// TODO: Add your control notification handler code hereUpdateData(TRUE);m_age=m_age+(float)pNMUpDown->iDelta;if(m_age<0) m_age=0;if(m_age>10) m_age=10;UpdateData(FALSE);*pResult = 0;}void CSpinButtonDlg::OnOK(){// TODO: Add extra validation hereUpdateData(TRUE);CString str;char *temp=new char;itoa(m_age,temp,10);str="结果显示:\n姓名:";str+=m_name;str+="\n年龄:";str+=temp;str+="\n年级:";str+=m_class;str+="\n电话:";str+=m_phone;MessageBox(str);//CDialog::OnOK(); }。

第6章 VC++和MFC之窗口和对话框编程

第6章 VC++和MFC之窗口和对话框编程

: 树式控件
: 选项卡控件
: 动画
: 多信息编辑
: 日期-时间选择器
: 月历
: IP地址
: 自定义控件
: 扩展组合框
2
选择
0
按钮
0
复选框
8 控
文本编辑框

组合框

列表框

分组框

..
单选按钮
静态文本框
图形控件
水平滚动条
垂直滚动条
滑块控件
微调控件
进度指示器控件
2
热键
0
列表控件
0
树形控件
8 控
选项卡控件
第6章 MFC编程实例之窗口和对话框编程
§6. 1 MFC编程实例之窗口程序
第一步:使用新建项目向导建立窗口程序框架
其中:1. 单个文档(SDI):只有一个视窗的窗口程序
2. 多个文档(MDI):可以有多个视窗的窗口程序
注:选择“文件—>新建/打开”
3. 多个顶级文档:可以有多个窗口(框架)的窗口程序
第三步:手工添加代码且生成解决方案(编译)和执行
编译、执行:“顶层菜单+1层菜单1”结果
执行:“顶层菜单+1层菜单2”结果
向工具栏中添加和编辑按钮
编译、执行结果⑴
执行结果⑵
直接点击“11”按钮运行结果:
直接点击“12”按钮运行结果:(参见程序“MfcWin(6-1)”)
注意:如果“按钮”是独立的(不同某菜单项关联),则需手工添 加代码来实现。参见附件:关于VC++杂谈(二)
注:本节仅以CFontDialog类为例进行讲解
步骤1:在CMfcWinView类中声明3个变量

VC MFC 编程实例17

VC MFC 编程实例17
B.3 窗口消息的消息映像宏
宏 ON_MESSAGE(WM_XXX,Handler) 例如: O N _ M E S S A G E ( W M _ C R E AT E , M y Handler) ON_MESSAGE(WM_PAINT,MyHan dler) ON_WM_XXX 例如: ON_WM_CREATE() ON_WM_DESTROY() 可每一个标准窗口消息都有属于它 自己的宏,它没有参数,并且它的 名字和使用基于它的 WM_XXX设计 OnXxx(message specific)(因为参数是 特定的消息,最好让 Class Wi z a r d添 加这些宏到消息映像中 ) 说 明 消息处理函数调用参数 可 L R E S U LT Handler (WP A R A M wParam,LPARAM lParam) 可
本文由sdhexu贡献
pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
下载
附录B 消息,控件通知和消息映像宏
B.1 一些通用窗口消息
WM命令 WM_CREATE 描 述 参数说明 发lParam指向CREATESTRUCT,它包含 C r e a t e Window ( ) 参数;初始化成功时 应返回0 WM_INITDIALOG 发发送此消息,告诉对话框初始化自己; 在WM_CREATE消息之后以及在所有对 话框中的控件被创建后发送 WM_GETMINMAXINFO WM_SIZE 发发送此消息,告诉窗口即将被重调到窗 口必须保持的最大或最小尺寸 发发送此消息,告诉一个窗口已被重调大小 发wParam是接收初始焦点的控件窗口的 句柄,lParam是被CreateDialogParam ( ) 传递的可选参数 发lParam指向一个MINMAXINFO结构, 它允许窗口设置它的最小和最大尺寸 发wParam是一个标志,用以区分窗口被 最大化,最小化还是只是被重调大小. lParam告诉新窗口的大小 WM_PAINT WM_DESTROY WM_NCCREATE WM_NCDESTROY WM_NCPAINT WM_ERASEBKGND WM_SHOWWINDOW WM_ENABLE WM_INITMENUPOPUP 发发送此消息,告诉窗口绘制它的客户区 发发送此消息,告诉一个窗口重新分配全 局堆上的任何内容 发发送此消息,告诉一个窗口正初始化非 客户区 发发送此消息,告诉一个窗口非客户区已 被销毁 发发送此消息,告诉一个窗口绘制它的非 客户区 发发送此消息,告诉一个窗口擦除背景 发发送此消息,告诉窗口显示或隐藏自己 发发送此消息,告诉一个窗口启用或禁用 自己 发发送此消息,告诉窗口它的系统菜单或 主菜单将被打开 WM_HELP 发发送此消息, 告诉一个窗口F1键已被按下 发wParam拥有菜单对象的句柄,lParam的 低位字表示子菜单位置,如果 lParam的 高位字非0,则系统菜单将打开 发lParam包含一个HELPINFO结构的指针, 结构包含处理上下文相关的帮助所需要 的信息 WM_MOUSEMOVE 发当鼠标移到它的客户区时被寄送到一个 窗口 WM_LBUTTONDOWN WM_LBUTTONUP 发鼠标的左键在客户区被按下时,被寄送 到该窗口 发当鼠标左键在窗口的客户区被松开时, 被寄送到该窗口 发与WM_MOUSEMOVE相同 发wParam指示是否有键盘的Shift-Ctrl-Alt 键被按下, l P a r a m指示相对于客户区的 新的鼠标光标位置 发与WM_MOUSEMOVE相同 发w P a r a m拥有绘制区域的句柄,区域 在第4章中描述 发wParam指定进行擦除的设备环境(一个 绘制的和被填充的矩形 ) 发如果wParam非0,则窗口被显示 发如果wParam非0,则窗口已被启用 发l P a r a m指向 W M _ C R E AT E使用的相 同的CREATESTRUCT结构 发wParam和lParam未被使用 发wParam是进行绘制的设备环境 发wParam和lParam未被使用

VC(MFC)开发OPENGL程序

VC(MFC)开发OPENGL程序

VC(MFC)开发OPENGL程序作者:李英江日期: 2006-08-10 19:07:00网站:转载请保留作者内容!利用使用VC开发OPENGL程序,运用MFC库,做一个简单例子我简单介绍一下图形接口,现在流行的两大图形接口Direct3D 和OpenGL,Direct3D主要是针对游戏,像starcaft星际争霸,它支持DX5.0以上的版本,但是不少游戏同时支持两种图形加速,如CS,魔兽争霸。

OpenGL主要是针对专业的图形应用,在军事,医学,GIS地理信息系统,动画(3dsmax,maya...),电影,等应用广泛,并且可以在不同的平台上应用,DX相对来说就只能限于Windows操作系统了。

1.运用MFC向导,生成一个单文档应用程序,不做任何事的MFC 框架程序。

2.视图类中添加窗口样式。

/************************************************************** *******/BOOL CMfc_basicView::PreCreateWindow(CREATESTRUCT& cs){// Add Window styles required for OpenGL before window iscreatedcs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CS_OWNDC);return CView::PreCreateWindow(cs);}/************************************************************** *******/3.在afxcmn.h中包含OPENGL头文件。

/************************************************************** *******/#include <afxcmn.h>// MFC support for Windows Common Controls// Inserted these files for openGL#include <gl.h>#include <glut.h>#include <glu.h>#include <glaux.h>#endif // _AFX_NO_AFXCMN_SUPPORT/************************************************************** *******/4.视图类中 .h文件中加入四个public 成员变量/************************************************************** *******/HGLRC m_hRC; // Permanent Rendering ContextHDC m_myhDC; // Private GDI Device Contextint m_height; // Stores the height of the Viewint m_width; // Stores the width of the view/************************************************************** *******/5.视图类中右键添加一个BOOL成员函数SetupPixelFormat/************************************************************** *******/BOOL COglm_demoView::SetupPixelFormat(){GLuint PixelFormat;static PIXELFORMATDESCRIPTOR pfd= {sizeof(PIXELFORMATDESCRIPTOR),// Size Of This Pixel Format Descriptor1,// Version Number (?)PFD_DRAW_TO_WINDOW | // Format Must Support WindowPFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_TYPE_RGBA, // Request An RGBA Format24, // Select A 24Bit Color Depth0, 0, 0, 0, 0, 0, // Color Bits Ignored (?)0, // No Alpha Buffer0, // Shift Bit Ignored (?)0, // No Accumulation Buffer0, 0, 0, 0, // Accumulation Bits Ignored (?)16, // 16Bit Z-Buffer (Depth Buffer)0, // No Stencil Buffer0, // No Auxiliary Buffer (?)PFD_MAIN_PLANE, // Main Drawing Layer0, // Reserved (?)0, 0, 0 // Layer Masks Ignored (?)};m_myhDC = ::GetDC(m_hWnd); // Gets A Device Context For The WindowPixelFormat = ChoosePixelFormat(m_myhDC, &pfd); // Finds The Closest Match To The Pixel Format We Set Aboveif (!PixelFormat){::MessageBox(0,"Can't Find A Suitable PixelFormat.","Error",MB_OK|MB_ICONERROR);PostQuitMessage(0);// This Sends A 'Message' Telling The Program To Quitreturn false ; // Prevents The Rest Of The Code From Running}if(!SetPixelFormat(m_myhDC,PixelFormat,&pfd)){::MessageBox(0,"Can't Set The PixelFormat.","Error",MB_OK|MB_ICONERROR);PostQuitMessage(0);return false;}m_hRC = wglCreateContext(m_myhDC);if(!m_hRC){::MessageBox(0,"Can't Create A GL Rendering Context.","Error",MB_OK|MB_ICONERROR);PostQuitMessage(0);return false;}if(!wglMakeCurrent(m_myhDC, m_hRC)){::MessageBox(0,"Can't activate GLRC.","Error",MB_OK|MB_ICONERROR);PostQuitMessage(0);return false;}// Now that the screen is setup we can// initialize OpenGL();InitGL();return true;}/************************************************************** *******/6.关闭WM_ERASEBACKGROUND消息,不关闭的话,画图时会闪动.在视图类中选择“Add Windows Message Handler”加入消息处理函数./************************************************************** *******/BOOL CMfc_basicView::OnEraseBkgnd(CDC* pDC){return FALSE;}/************************************************************** *******/7.初始化OPENGL 添加InitGL()函数./************************************************************** *******/void CMfc_basicView::InitGL(){// Enables Depth TestingglEnable(GL_DEPTH_TEST);// Enable the point size for selected pointsglPointSize(5.0f);// This Will Clear The Background Color To BlackglClearColor(.4, 0.2, 0.0, 0.0f);// Reset the current projection matrixSetProjection();glMatrixMode(GL_MODELVIEW);glLoadIdentity();//Enable back face culling, defaults to Clock wise vertices.glEnable(GL_CULL_FACE);glEnable(GL_COLOR_MATERIAL);glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);glShadeModel(GL_SMOOTH);glPolygonMode(GL_FRONT, GL_FILL);}/************************************************************** *******/8. 在视图类中添加调窗口大小的处理函数OnSize() 消息句柄/************************************************************** *******/void CMfc_basicView::OnSize(UINT nType, int cx, int cy){CView::OnSize(nType, cx, cy);glMatrixMode(GL_MODELVIEW);glLoadIdentity();// Make the rendering context currentwglMakeCurrent(m_myhDC,m_hRC);// Reset The Current Viewport And Perspective TransformationglViewport(0, 0, cx, cy);m_height= cy;m_width = cx;// Calculate The Aspect Ratio Of The WindowgluPerspective(60.0f,(GLfloat)cx/(GLfloat)cy,0.1f,1000.0f);}9.添加SetPorjection()函数void CMfc_basicView::SetProjection(){glViewport(0, 0, m_width, m_height);// Reset The Projection MatrixglMatrixMode(GL_PROJECTION);glLoadIdentity();// It's a perspective projection// Calculate The Aspect Ratio Of The WindowgluPerspective(60.0f,(GLfloat)m_width/(GLfloat)m_height, 0.1f,3000.0f);}/************************************************************** *******/10.在Project 菜单选择Settings. 单击Link 选项页Object/library Module添加库文件.opengl32.lib glu32.lib glut.lib glaux.lib11.在视图类中加入OnCreate消息句柄/*********************************************************************/int CMfc_basicView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;SetupPixelFormat();wglMakeCurrent(NULL,NULL);return 0;}/************************************************************** *******///现在编译程序的话,会看到一个无法刷新的应用程序了。

VC++MFC鼠标做图编程实验

VC++MFC鼠标做图编程实验

一、实验目的(1) 熟悉开发环境;(2) 掌握应用MFC类库编写鼠标绘图程序的方法;(3) 掌握MFC环境中绘图函数的使用方法。

二、实验内容创建一个单文档应用程序,实现鼠标的绘图功能。

要求:(1) 创建一个工具栏,有线段、矩形、椭圆三个按钮;(2) 绘图前,选择工具栏上的按钮,确定图形的形状。

按下鼠标左键,开始绘图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标的移动在屏幕上实时绘制图形,放开鼠标左键,确定最后的图形,绘制在屏幕上。

三、实验处理列表实现绘图功能的代码清单:1、代码如下#if !defined(AFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA16 8545__INCLUDED_)#defineAFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA168545__INCL UDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CPic{public:CPic();virtual ~CPic();void Draw(CDC *PDC);public:UINT m_nDrawType;int m_nX0;int m_nY0;int m_nX1;int m_nY1;};#endif// !defined(AFX_PIC_H__00F5F2B9_A2A6_4ED6_907E_EC07AA1685 45__INCLUDED_)2、代码如下:// Pic.cpp: implementation of the CPic class.////////////////////////////////////////////////////////////////////////#include ""#include "Shiyan8.h"#include ""#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CPic::CPic(){}CPic::~CPic(){}void CPic::Draw(CDC *pDC){CPen PenLN,*pOldPen;(PS_SOLID,3,RGB(255,0,0));pOldPen = pDC->SelectObject(&PenLN);switch(m_nDrawType){case 0:pDC->MoveTo(m_nX0,m_nY0);pDC->LineTo(m_nX1,m_nY1);break;case 1:pDC->Ellipse(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:pDC->Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);break;}pDC->SelectObject(pOldPen);}3、程序如下:// Shiyan8View.cpp : implementation of the CShiyan8View class//#include ""#include "Shiyan8.h"#include "Shiyan8Doc.h"#include "Shiyan8View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CShiyan8ViewIMPLEMENT_DYNCREATE(CShiyan8View, CView)BEGIN_MESSAGE_MAP(CShiyan8View, CView)//{{AFX_MSG_MAP(CShiyan8View)ON_COMMAND(ID_DRAW_FILEOPEN, OnDrawFileopen)ON_UPDATE_COMMAND_UI(ID_DRAW_FILEOPEN, OnUpdateDrawFileopen)ON_COMMAND(ID_DRAW_FILESA VE, OnDrawFilesave)ON_UPDATE_COMMAND_UI(ID_DRAW_FILESA VE, OnUpdateDrawFilesave)ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE()ON_WM_LBUTTONUP()//}}AFX_MSG_MAPON_COMMAND_RANGE(ID_DRAWTYPE_LINE,ID_DRAWTYPE_RECT,OnDrawType)ON_UPDATE_COMMAND_UI_RANGE(ID_DRAWTYPE_LIN E, ID_DRAWTYPE_RECT,OnUpdateDrawType)// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CShiyan8View construction/destructionCShiyan8View::CShiyan8View(){// TODO: add construction code herem_nDrawType = 0;m_nX0 = 0;m_nY0 = 0;m_nX1 = 0;m_nY1 = 0;m_nPicNum = 0;}CShiyan8View::~CShiyan8View(){}BOOL CShiyan8View::PreCreateWindow(CREATESTRUCT& cs) {// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CShiyan8View drawingvoid CShiyan8View::OnDraw(CDC* pDC){CShiyan8Doc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data herefor(int i=0;i<m_nPicNum;i++){m_Pic[i].Draw(pDC);}}/////////////////////////////////////////////////////////////////////////////// CShiyan8View printingBOOL CShiyan8View::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CShiyan8View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CShiyan8View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CShiyan8View diagnostics#ifdef _DEBUGvoid CShiyan8View::AssertValid() constCView::AssertValid();}void CShiyan8View::Dump(CDumpContext& dc) const{CView::Dump(dc);}CShiyan8Doc* CShiyan8View::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShiyan8Doc)));return (CShiyan8Doc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CShiyan8View message handlersvoid CShiyan8View::OnDrawFileopen(){// TODO: Add your command handler code here}void CShiyan8View::OnUpdateDrawFileopen(CCmdUI* pCmdUI){// TODO: Add your command update UI handler code herepCmdUI->Enable(FALSE);}void CShiyan8View::OnDrawFilesave(){// TODO: Add your command handler code herevoid CShiyan8View::OnUpdateDrawFilesave(CCmdUI* pCmdUI){// TODO: Add your command update UI handler code herepCmdUI->Enable(FALSE);}void CShiyan8View::OnDrawType(WORD nID){m_nDrawType = nID-ID_DRAWTYPE_LINE;}void CShiyan8View::OnUpdateDrawType(CCmdUI* pCmdUI){pCmdUI->SetRadio(m_nDrawType == pCmdUI->m_nID-ID_DRAWTYPE_LINE);}void CShiyan8View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_nX0 = m_nX1 = ;m_nY0 = m_nY1 = ;CView::OnLButtonDown(nFlags, point);}void CShiyan8View::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);CPen PenBK,PenLN,*pOldPen;if(nFlags & MK_LBUTTON)(PS_SOLID,1,RGB(255,255,255)); (PS_DASH, 1,RGB(255,0,0)); pOldPen = (&PenBK);switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(&PenLN);m_nX1 = ;m_nY1 = ;switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(pOldPen);CView::OnMouseMove(nFlags, point);}void CShiyan8View::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default CClientDC dc(this);CPen PenBK,PenLN,*pOldPen;(PS_SOLID,1,RGB(255,255,255));(PS_SOLID,3,RGB(255,0,0));pOldPen = (&PenBK);switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}(&PenLN);m_nX1 = ;m_nY1 = ;switch(m_nDrawType){case 0:(m_nX0,m_nY0);(m_nX1,m_nY1);break;case 1:(m_nX0,m_nY0,m_nX1,m_nY1);break;case 2:(m_nX0,m_nY0,m_nX1,m_nY1);break;}m_Pic[m_nPicNum].m_nDrawType = m_nDrawType;m_Pic[m_nPicNum].m_nX0 = m_nX0;m_Pic[m_nPicNum].m_nY0 = m_nY0;m_Pic[m_nPicNum].m_nX1 = m_nX1;m_Pic[m_nPicNum].m_nY1 = m_nY1;m_nPicNum++;(pOldPen);CView::OnLButtonUp(nFlags, point);}其他的程序略四、实验总结:1.在Resource View中展开menu资源菜单中,设计如下:2、在Resource View中展开Toorlbar资源菜单中,设计如下:3、本实验的一部分代码可以从实验六中复制过来,但应注意变量名称。

VC++实验四 MFC图形绘制编程实验

VC++实验四 MFC图形绘制编程实验

实验四 MFC图形绘制编程实验一、实验目的(1) 熟悉Visual C++ 6.0开发环境;(2) 掌握MFC消息映射的操作步骤;(2) 掌握MFC图形输出的方法;(3) 理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。

二、实验内容请编写程序,要求如下:(1) 定义一支黄色画笔,绘制一条线段;(1) 定义一支紫色画笔,绘制一条多段线;(3) 定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部;(4) 定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部;(5) 定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。

三、实验报告1.列出图形绘制程序代码清单:(1)在头文件Demo.h中:#include "afxwin.h"class CDemoWnd:public CFrameWnd{public:CDemoWnd();~CDemoWnd();public:LRESULT OnPaint(WPARAM wParam,LPARAM lParam);DECLARE_MESSAGE_MAP()public:int m_nX0;int m_nY0;int m_nX1;int m_nY1;};class CDemoApp:public CWinApp{public:BOOL InitInstance();};CDemoApp ThisApp;(2)在源文件Demo.cpp中:#include "Demo.h"CDemoWnd::CDemoWnd(){m_nX0 = 0;m_nY0 = 0;m_nX1 = 0;m_nY1 = 0;}CDemoWnd::~CDemoWnd(){}BEGIN_MESSAGE_MAP(CDemoWnd,CFrameWnd)ON_MESSAGE(WM_PAINT,OnPaint)END_MESSAGE_MAP()LRESULT CDemoWnd::OnPaint(WPARAM wParam,LPARAM lParam) {CPaintDC dc(this);CPen Pen1,*pOldPen1;Pen1.CreatePen(PS_SOLID,10,RGB(255,255,0));pOldPen1=dc.SelectObject(&Pen1);dc.SelectObject(&Pen1);dc.MoveTo(10,10);dc.LineTo(100,100);CPen Pen2,*pOldPen2;Pen2.CreatePen(PS_SOLID,4,RGB(255,0,255));pOldPen2=dc.SelectObject(&Pen2);dc.SelectObject(&Pen2);POINT pt1[]={{100,10},{10,180},{200,150}};dc.Polyline(pt1,3);CPen Pen3,*pOldPen3;dc.SelectStockObject(BLACK_BRUSH);Pen3.CreatePen(PS_SOLID,4,RGB(255,0,0));pOldPen3=dc.SelectObject(&Pen3);dc.SelectObject(&Pen3);dc.Rectangle(300,50,400,150);CPen Pen4,*pOldPen4;dc.SelectStockObject(GRAY_BRUSH);Pen4.CreatePen(PS_SOLID,4,RGB(0,255,0));pOldPen4=dc.SelectObject(&Pen4);dc.SelectObject(&Pen4);dc.Ellipse(500,200,700,400);CPen Pen5,*pOldPen5;Pen5.CreatePen(PS_SOLID,4,RGB(0,0,255));pOldPen5=dc.SelectObject(&Pen5);dc.SelectStockObject(DKGRAY_BRUSH);dc.SelectObject(&Pen5);POINT pt2[]={{250,250},{400,250},{475,379},{400,509},{250,509},{175,379}};dc.Polygon(pt2,6);return 0;}BOOL CDemoApp::InitInstance(){CDemoWnd *pMainWnd = new CDemoWnd();pMainWnd->Create(NULL,"Demo Mini-MFC");pMainWnd->ShowWindow(m_nCmdShow);pMainWnd->UpdateWindow();m_pMainWnd = pMainWnd;return TRUE;}2、程序运行结果:3、总结在MFC 程序中绘制图形的基本操作步骤:(1)获取图形设备接口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DECLARE_MESSAGE_MAP() }; //消息映射 BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd) ON_WM_LBUTTONDOWN() ON_WM_PAINT() END_MESSAGE_MAP()
第10章 Visual C++编程Visual C++编程实例
程序开始
生 成 C w i nA pp 一 个 实 例 , 的 初始化全局对象
A fx W i n M a i n () 的函数体
初始化句柄
退出句柄 W i n d M a( ) in 的函数体 消息循环
退出句柄
程序结束
图 10-1
第10章 Visual C++编程实例
第10章 Visual C++编程实例
小 结
本章讲述了基于对话框的应用程序的基本编程思 路、基于单文档编程的菜单设计和工具栏设计的基本 方法。 1. 首先介绍基于对话框的应用程序编程的工作流 程,然后介绍了一个吹彩色泡泡的实例,讲述了相关 的一些函数和常用的MFC类库的成员函数。 2. 讲述了基于对话框的应用程序的实例。主要讲 述了设计一个简单的对话框用户界面的步骤。 3. 讲述了菜单的概念和设计一个菜单的步骤。 4. 讲述了工具栏的设计步骤。
组,每当用户按下鼠标左键时,就产生一个泡泡的数 据并存入数组中。最后,由框架窗口类的OnPaint()函 数显示所有的泡泡。
第10章 Visual C++编程实例
#include<afxwin.h>
#define MAX_BUBBLE 250 class CMyWnd:public CFrameWnd { CRect m_rectBubble[MAX_BUBBLE];
return TRUE;
} CMyApp ThisApp; //全局应用程序对象 按【Ctrl+F5】运行程序,运行结果如图10-2所示。
第10章 Visual C++编程实例
说明:
该程序声明了两个类,一个是由应用程序类 CwinApp派生出来的CmyApp类,一个是由框架窗口 CframeWnd类派生出来的CmyWnd类。MFC的基本类 名均以字母C打头,习惯上在为使用MFC编写的应用 程序中的类起名时也这样做。在程序中还声明了一个 CmyWnd类的全局对象ThisApp。 参考资料:/neike/jk/
penNew.CreatePen(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&brushNew); dc.SelectObject(&penNew);
第10章 Visual C++编程实例
for(int i=0;i<m_nBubbleCount;i++)
dc.Ellipse(m_rectBubble[i]); } //应用程序类 class CMyApp:public CWinApp
第10章 Visual C++编程实例
第10章 Visual C++编程实例
10.1 MFC编程流程 10.2 常用MFC类和消息处理
10.3 对话框的应用
10.4 菜 单 的 应 用
10.5 工具栏应用
第10章 Visual C++编程实例
10.1 MFC编程流程
在普通的C/C++程序中,可以看到程序从main函数 开始到结束的所有代码,但在Visual C++中MFC封装了 一部分类,同时也隐藏了一部分代码,因此我们看不 到源程序的所有代码,例如从项目的所有源文件中找 不到main函数。 基本对话框的MFC程序流程图如图10-1所示。
{
public: BOOL InitInstance(); }; BOOL CMyApp::InitInstance()
第10章 Visual C++编程实例
{
CMyWnd *pFrame=new CMyWnd; pFrame->Create(0,_T("吹彩色泡泡")); pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd=pFrame;
}
第10章 Visual C++编程实例
}
void CMyWnd::OnPaint() {
CPaintDC dc(this);
CBrush brushNew; CPen penNew; brushNew.CreateSolidBrush(RGB(rand()%255,rand()%25 5,rand()%255));
一个MFC程序运行的一般过程如下:
(1) 生成CwinApp的一个实例(调用CwinApp的构造函数), 初始化全局对象; (2) Win32入口程序函数WinMain调用函数AfxWinMain; (3) AfxWinMain调用函数CwinApp的成员函数InitInstance;
(4) AfxWinMain调用函数CwinApp的成员函数Run;
(5) AfxWinMain函数返回到WinMain,WimMain结束,程 序结束。
第10章 Visual C++编程实例
例10-1
吹泡泡程序。每当用户在窗口客户区中按
下鼠标左键时即可产生一个泡泡(彩色圆形)。 设计思路:显示一个泡泡所需的数据包括其位置
和大小,在MFC中可用其包含矩形表示。可设置一数
int m_nBubbleCount;
public: CMyWnd() {m_nBubbleCount=0;}
第10章 Visual C++编程实例
protected:
afx_msg point); void OnLButtonDown(UINT nFlags,CPoint
afx_msg void OnPaint();
void CMyWnd::OnLButtonDown(UINT nFlags,CPoint point) { if(m_nBubbleCount<MAX_BUBBLE) {
int r=rand()%50+10;
CRect rect(point.x-r,point.y-r,point.x+r,point.y+r); m_rectBubble[m_nBubbleCount]=rect; m_nBubbleCount++; InvalidateRect(rect,FALSE);
相关文档
最新文档