VS2008经典教程与MFC编程示例
- 格式:wps
- 大小:251.00 KB
- 文档页数:11
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_开头。
计算器的MFC编程实现(二)说明:相对文辑中第一个计算机编程,此程序更侧重于算法的安排。
第一部分:计算器功能介绍图1-1 计算器界面1)计算器通过编辑框显示输入的内容,并显示计算结果。
计算式的输入可以通过键盘或者点击计算器界面上的按钮输入两种方式。
2)输入完成后,点击“”,程序对计算式进行计算。
计算完成后通过编辑框输出结果。
图1-2 计算后的结果3)计算器可以实现十进制数到二进制数或者十六进制数的转变。
在编辑框中输入一个十进制数,点击相应转换按钮,可以显示输出结果。
图1-3 输入十进制数图1-4 转换为二进制数图1-5 转换为十六进制数二、计算器的实现Step1:新建一个MFC应用程序。
图2-1-1 新建MFC应用程序应用程序类型选择“基于对话框”。
图2-1-2 基于对话框的程序Step2:添加控件1.删除原有控件2.调整FRAME的大小。
通过拖动图上标注的拖曳点进行调整。
图2-1-3 调整框架大小3.按下图添加控件并修改控件的Caption和ID(具体修改方法在本文辑第一个计算器编写文档中已经详述)。
图2-1-4 计算器页面布局程序中ID 设置如图。
(Resourse.h )图2-1-5各控件的ID 设置4.添加控件变量。
为编辑框添加“CString ”型的变量“m_strResult ”。
(具体添加过程在本文辑第一个计算器程序设计中已经详述)Edit ControlButton图2-1-6 添加控件的控制变量5.为各个按钮添加控件事件在本文辑第一个计算器编程中已经详述。
6.修改各控件TAB键的顺序。
在“资源视图”页面中,同时按下“Ctrl”+“D”,各控件的顺序号显示如图。
图2-1-7各控件的顺序表号显示通过调整顺序号调整TAB键的跳转顺序。
7.修改计算器ICON。
导入图标文件。
并在“CCalculatorDlg.cpp”文件中,修改类“CCalculatorDlg”的构造函数中,修改为以下语句。
以下为vs2008的相关操作和代码:一、简单的逃跑按钮//注意下列方法,定义一个类为了捕获鼠标移动点的方便1,创建一个基于对话框的mfc应用程序选中对话框→属性→Front可以改变整个对话框字体2,创建CButton的派生类,与按钮相关联添加类(图1)3,给对话框添加2个相同按钮“你能抓住我吗?”让两个按钮轮流显示。
其中一个visible 设为false,使初始状态只显示一个按钮。
每个按钮都关联一个变量:添加控件变量(图2)mfc8_1Dlg.h头文件自动添加 #include"mybutton.h"CmyButton类添加消息WM_MOUSEMOVE4,给CmyButton类添加变量5,在OnInitDialog添加以下语句,交换2个button的地址m_btn1.m_pBtn = &m_btn2;m_btn2.m_pBtn = &m_btn1;6,CmyButton::OnMouseMove中添加交换显示的语句ShowWindow(SW_HIDE);//SW_HIDE:隐藏窗口并激活其他窗口。
m_pBtn->ShowWindow(SW_SHOW);//SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
大功告成!当然可以SetWindowPos函数实现更客观二、属性表的编辑新建mfc应用程序mfc8_21.创建属性页右键属性ID: IDD_PROP1Caption:属性页1属性页1放置groupboxRadio button 单选框List box列表框属性页3添加组合框ComboBox要向下拉的长一些,使列表能向下展开Style:Dropdown 能向下展开、输入Simple列表和编辑框同时显示Droplist 只能展开选择,不能输入本程序设为Droplist2. 双击属性页1添加类类CPropertyPage的对象表示一张属性表的各页,或者说是被看作是标签对话框。
VS2008 MFC教程什么是MFC?MFC(Microsoft Foundation Classes)是一组用于Windows开发的C++类库。
它是一种基于对象的编程框架,旨在简化Windows图形用户界面(GUI)应用程序的开发。
MFC提供了许多预定义的类和函数,可用于创建窗口、对话框、菜单、工具栏等常见界面元素。
使用MFC可以大大加快GUI应用程序的开发速度,并提供Windows应用程序的一致外观和行为。
VS2008中的MFCMFC应用程序在Visual Studio 2008中创建一个MFC应用程序非常简单。
可以选择使用MFC应用程序向导,该向导将引导您完成创建应用程序的过程。
在创建应用程序时,您可以选择使用对话框或单文档/多文档界面。
MFC文件结构一个MFC应用程序通常包含多个文件。
以下是一些主要文件和文件夹:•AppName.cpp:包含应用程序的主要函数WinMain。
•AppName.h:包含应用程序的头文件,声明了应用程序类的成员变量和函数。
•AppNameDoc.cpp、AppNameDoc.h:包含应用程序的文档类,并实现了文档的读写功能。
•AppNameView.cpp、AppNameView.h:包含应用程序的视图类,用于处理用户界面和绘图。
•AppNameDlg.cpp、AppNameDlg.h:如果应用程序使用了对话框界面,则会包含对话框类的文件。
MFC消息映射在MFC中,用户界面中的各种事件(如按钮点击、菜单选择等)被称为消息。
消息映射允许您将特定消息与特定函数关联起来。
例如,当用户点击一个按钮时,MFC将自动调用与该按钮关联的函数,从而实现与按钮相关的操作。
MFC使用宏定义来实现消息映射。
您可以通过在类的消息映射表中添加条目来指定消息和对应的函数。
例如:BEGIN_MESSAGE_MAP(CMyView, CView)ON_COMMAND(ID_FILE_OPEN, &CMyView::OnOpenFile) ON_COMMAND(ID_FILE_SAVE, &CMyView::OnSaveFile) END_MESSAGE_MAP()上述代码将ID_FILE_OPEN和ID_FILE_SAVE消息与CMyView类中的OnOpenFile和OnSaveFile函数相关联。
创建动态库方法一参考MFC手册的例子方法二在vs2008集成环境下开发动态库动态库部分步骤一创建动态库程序步骤二编写动态库代码右击项目名添加一个C++类1 在头文件中添加声明部分#include"stdio.h" // 加入需要用到的函数的头文件class MyDll2{public:__declspec(dllexport)MyDll2(void); //在成员函数前加入__declspec(dllexport) __declspec(dllexport)~MyDll2(void);static__declspec(dllexport) void show();//请注意上面的方法声明中的__declspec(dllexport) 修饰符。
//这些修饰符使DLL 能够导出该方法以供其他应用程序使用};2 在源文件中添加定义部分void MyDll2::show(){printf("调用动态库成功\n");}步骤三设置可以生成动态库文件(.dll)的配置步骤四编译生成动态库文件主程序部分(调用动态库的程序)步骤一创建调用程序步骤二右击主程序项目进入属性页配置动态库引用导入的是动态库头文件所在的文字(.h)动态链接库仅在运行时由可执行文件加载。
必须告诉系统在哪里查找“xxx.dll”。
这是使用PATH 环境变量实现的。
请在“属性页”对话框中,展开“配置属性”节点,并选择“调试”。
在“环境”旁边,键入以下内容:PATH=<path to MathFuncsDll.dll file>,其中<path to MathFuncsDll.dll file>应替换为“MathFuncsDll.dll”的实际位置。
按“确定”保存进行的所有更改。
(不设置也能用,我暂时还不知道为什么)如果要从命令行而不是从Visual Studio 内运行可执行文件,必须从命令提示处手动更新PATH环境变量,如下所示:set PATH=%PATH%;<path to MathFuncsDll.dll file>,其中<path to MathFuncsDll.dll file>应替换为“MathFuncsDll.dll”的实际位置。
图形画板2008设计文档目录1. 图形后台框架1.1. 基本图形类框架如下:2. 界面框架2.1. 快捷菜单2.2. 主菜单2.3. 工具栏3. 如何创建OFFICE风格的MFC工程4. 如何在工具栏上面添加按钮4.1. 添加菜单主项4.2. 为菜单项添加事件4.3. 添加Ribbon字符4.4. 将按钮添加到工具栏4.4.1. 创建主类别(CMFCRibbonCategory)4.4.2. 创建面板(CMFCRibbonPanel)4.4.3. 添加按钮(CMFCRibbonButton)到面板∙∙1. 图形后台框架1.1. 基本图形类框架如下:2. 界面框架主用应用了Visual Studio 2008 SP1添加的新增强包,可以方面的创建出像OFFCIE2007的Ribbon界面。
Ribbon工具栏是在MainFrm.CPP中的void CMainFrame::InitializeRibbon()生成的整个工具栏CMFCRibbonBar分为2.1. 快捷菜单2.2. 主菜单主菜单按钮CMFCRibbonApplicationButton主菜单CMFCRibbonMainPanel2.3. 工具栏主要分成3层结构:第一层:分类(容器)CMFCRibbonCategory,如图中红色部分所示。
第二层:面板(容器)CMFCRibbonPanel ,如图中红色部分所示。
第三层:元素CMFCRibbonBaseElem,如图中红色部分所示。
先有一个整体的概念~3. 如何创建OFFICE风格的MFC工程以下是创建Visual C++ 2008 SP1创建Office风格的MFC的步骤:首先,新建项目,选择Visual C++ 中的MFC应用程序,输入名称,点击确定接着选择Office的项目类型,MFC的使用选择“在静态库中使用MFC”(这样可以保证在任何Windows系统中都能正确运行,如果选择共享DLL,则只能在有MFC7.0库的机子上正确运行,所以推荐选“在静态库中使用MFC”)接下来的几个步骤都直接按默认即可这里我们先将“导航窗格”的勾去掉(由于本程序没有用到它,所以再此不详细介绍)这里将视图类的基类选为CScrollView,点击完成然后运行一下,基本的雏形就出来啦,简单吧~4. 如何在工具栏上面添加按钮4.1. 添加菜单主项接着继续添加菜单子项,并在属性栏中设置相应的属性,注意Prompt要按照“解释\n标题”这种格式,例如:Prompt绘制一个圆\n画圆做完要记得保存哦4.2. 为菜单项添加事件右键点击需要添加事件的选项,选择添加“事件处理程序”点击“添加编辑”,然后就到视图类的结尾找到这个事件的函数,开始编写事件,可以注意到“函数处理程序名称”是根据“命令名”自动生成的,虽然自己也可以修改,不过还是按默认的比较好,所以也说明上面提到的加入ID时候要根据这样的命名规则来命名。
在VC6.0时代,我们通过在MFC工程中插入Splash组件来简单方便的实现这个功能,但在VS2008以后就没有了这个功能,所以如果想给自己的程序添加一个显示Logo的启动画面,就需要自己添加代码来实现,参考了下VC6.0中这个Splash组件添加后的代码,就很容易在自己的项目里实现这个功能。
如下图(来自网络)。
本文以VS2008为例做一个演示:首先,在菜单的“项目”中选择“添加类”->”c++类”,生成一个启动画面的Splash类。
然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。
在CwzdSplash类的头文件中我们添加下面的代码:#pragma once// CWzdSplashclass CWzdSplash : public CWnd{DECLARE_DYNAMIC(CWzdSplash)public:CWzdSplash();virtual ~CWzdSplash();protected:DECLARE_MESSAGE_MAP()public:CBitmap m_bitmap;// void Create(void);void Create(UINT nBitmapID);afx_msg void OnPaint();afx_msg void OnTimer(UINT_PTR nIDEvent);};在CwzdSplash类的cpp文件中我们添加下面的代码:// WzdSplash.cpp : 实现文件//#include "stdafx.h"#include "TinyPlusCompiler.h"#include "WzdSplash.h"// CWzdSplashIMPLEMENT_DYNAMIC(CWzdSplash, CWnd) CWzdSplash::CWzdSplash(){}CWzdSplash::~CWzdSplash(){}BEGIN_MESSAGE_MAP(CWzdSplash, CWnd) ON_WM_PAINT()ON_WM_TIMER()END_MESSAGE_MAP()// CWzdSplash 消息处理程序void CWzdSplash::Create(UINT nBitmapID) {m_bitmap.LoadBitmap(nBitmapID);BITMAP bitmap;m_bitmap.GetBitmap(&bitmap);//CreateEx(0,AfxRegisterWndClass(0),"",WS_POPUP|WS_VISIBLE|WS_BORDER,0 ,0,bitmap.bmWidth,bitmap.bmHeight,NULL,0);CreateEx(0,AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),NULL, WS_POPUP | WS_VISIBLE, 0, 0, bitmap.bmWidth, bitmap.bmHeight, NULL , NULL);}void CWzdSplash::OnPaint(){// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用CWnd::OnPaint()CPaintDC dc(this); // device context forpaintingBITMAP bitmap;m_bitmap.GetBitmap(&bitmap);CDC dcComp;dcComp.CreateCompatibleDC(&dc);dcComp.SelectObject(&m_bitmap);// draw bitmapdc.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcComp,0,0,SRCCOPY);}void CWzdSplash::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值//CWnd::OnTimer(nIDEvent);DestroyWindow(); //销毁初始画面窗口}最后在项目的主窗口视图的Create函数中添加下面的实例化过程就可以显示出我们自定义的Logo启动画面了:CWzdSplash wndSplash; //创建启动窗口类的实例wndSplash.Create(IDB_SPLASH);wndSplash.CenterWindow();wndSplash.UpdateWindow(); //send WM_PAINTSleep(1500);wndSplash.DestroyWindow();//销毁初始画面窗口注明一下要注意的地方:wndSplash.Create(IDB_SPLASH);中的IDB_SPLASH是在添加位图资源时添加进来的资源ID,自己可以定义自己所喜欢的启动图画。
实例一:最简单的对话框程序Step1:新建MFC应用程序首先打开Visual Studio2008,选择MFC应用程序,设定好路径和工程名(这里我设置工程名为为“Calculator”)。
这里要注意的是在创建向导步骤1的时候,我们选择“基本对话框”,其他选项默认即可。
点击“完成”后界面如图所示。
Step2:添加代码在文件“MFChello.cpp”中,添加如下代码:MessageBox(NULL,"一个简单的MFC程序应用","实例一",MB_OK);出现的问题:MessageBox(NULL,"一个简单的MFC程序应用","实例一",MB_OK);error C2664: “MessageBoxW”: 不能将参数2 从“const char [22]”转换为“LPCWSTR”解决方法:1.“项目”——>“MFChello属性”“配置属性”——〉“常规”——〉“字符集”,选择“使用多字节字符集”。
2.将代码改为:MessageBox(NULL,L"一个简单的MFC程序应用",L"实例一",MB_OK);实例二:鼠标点击测试程序Step1:新建一个MFC应用程序同上,不再赘述。
Step2:修改界面选择图中Edit Cntrol 控件,点击右键,选择“属性”,右侧显示属性对话框。
修改Caption为“提示:点击鼠标左键或者右键试试”Step3:添加鼠标响应消息左侧“类视图”,选择类“CHelloworldDlg”,点击“”,添加“消息”。
选择“WM_LBOTTUNDOWN”,点击下拉箭头,添加“OnLButtonDown”同样添加消息“OnRButtonDown”。
Step4:添加代码出现的问题:Caption显示乱码解决方法:1.“项目”——>“MFChello属性”2. “配置属性”——〉“常规”——〉“字符集”,选择“使用多字节字符集”。
VS2008使用教程引言Visual Studio 2008(简称VS2008)是一款功能强大的集成开发环境(IDE),被广泛用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序和移动应用程序等。
本教程将为您介绍如何使用VS2008进行开发,并提供一些常用功能和技巧的使用方法。
安装和设置在使用VS2008之前,您需要先下载并安装它。
您可以从微软官方网站或其他可信的下载源获取安装程序。
安装完成后,您需要进行一些基本设置,以配置和个性化您的开发环境。
1.启动VS2008安装程序,并按照提示进行安装。
2.完成安装后,启动VS2008,您将看到欢迎界面和开始菜单。
3.在设置对话框中,您可以选择默认的编程语言和工作区布局,还可以更改其他个性化设置,例如颜色方案和字体大小等。
创建新项目使用VS2008,您可以创建多种类型的项目,例如控制台应用程序、Windows窗体应用程序、 Web应用程序等。
下面将介绍如何创建一个新的控制台应用程序项目。
1.在VS2008的开始菜单中,选择“新建项目”。
2.在新建项目对话框中,选择“Visual C++”(或其他适当的编程语言)并选择“控制台应用程序”项目模板。
3.输入项目的名称和存放路径,并点击“确定”创建项目。
4.创建完成后,您将看到一个空白的代码文件和一个主函数。
编写代码在VS2008中,您可以使用内置的代码编辑器来编写代码。
编辑器具有很多实用的功能,如语法高亮、自动完成和错误提示等。
1.在新建项目中,打开代码文件(通常是.cpp或.cs文件)。
2.在编辑器中输入您的代码。
VS2008提供了丰富的代码片段和代码模板,可以加快编码速度。
3.保存代码文件,并使用编译器和调试器来验证代码的正确性。
编译和运行在VS2008中,您可以通过点击按钮或使用快捷键来编译和运行您的应用程序。
1.在工具栏上找到“生成”或“调试”按钮。
2.点击“生成”按钮,VS2008将使用选择的编译器编译您的代码。
VS2008基于对话框的MFC上位机串⼝通信(C++实现)简单例程⾸先,在 vs2008 环境下创建 MFC 运⽤程序设置项⽬名称为 ComTest(这个地⽅随意命名,根据个⼈习惯),点击确定后,点击下⼀步出现如下界⾯选择“基于对话框”模式然后直接点击完成即可(其他选项按默认⽅式),点击完成后出现如下界⾯解决资源管理器中⾃动给你⽣成好代码⽬录(可点击菜单栏“视图”选项打开解决⽅案资源管理器),如下图所⽰我们再次回到对话框编辑窗⼝,删除⾃动⽣产的控件(静态⽂本控件、确定和取消按钮控件),并在⼯具箱⾥添加两个button按钮和编辑框,之后的界⾯如下图所⽰:然后把最重要的串⼝通信控件加⼊到⼯具箱中,因为默认的⼯具箱是不带 MS 串⼝通信控件的。
添加⽅法如下:在⼯具箱界⾯点击⿏标右键出现如下界⾯:然后点击选择项出现如下界⾯,然后选择“COM 组件”找到并选中该项最后点击确定键,就成功添加 MS 串⼝通讯控件了,⼯具箱中就会出现串⼝控件图标了我们吧串⼝控件添加到对话框⾥,位置随意,运⾏的时候是看不见的,所以最终界⾯是这样⼦的下⾯开始添加变量,⾸先为IDC_MSCOMM1添加控制变量:m_ctrlComm,在串⼝通信图标上右键点击选择添加变量,如图:完成就可以了,控件ID和类别是可以选的,下⾯为按钮和编辑框添加变量时选不同的就⾏了。
两个编辑框,⼀个⽤于接收显⽰数据ID设置为IDC_EDIT_RXDATA(在控件属性框⾥设置),另⼀个⽤于输⼊发送数据,ID设置为IDC_EDIT_TXDATA,两岸按钮,⼀个⽤于发送数据,将其ID设为IDC_BUTTON_MANUALSEND,另⼀个⽤于清空接收的编辑框,ID默认就⾏,不再赘述。
接着添加变量,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。
说明:m_strRXData和m_strTXData分别⽤来放⼊接收和发送的字符数据。
VS2008中使用MFC开发基于Halcon10的配置--以基于对话框的MFC应用程序为例。
第一步,建立MFC应用程序,给工程取个名字叫1_VS08MFC_H10_01,如下图所示:打开visual studio 2008->文件->新建->项目->Visual C++->MFC->MFC应用程序->输入程序名称->确定第二步,选择基于对话框的应用程序,如下图所示:第三步:在本例中,我们在对话框中,添加两个按钮,一个按钮用来加载图片,一个用来处理图片,如下所示:第四步:附加包含目录的配置(#include ***.h)C:\Program Files\MVTec\HALCON-10.0\include;C:\Program Files\MVTec\HALCON-10.0\include\cpp第五步:链接器的配置(库(*.lib)的名称和索引)halconcpp.libC:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32第六步:C++目录的配置【】工具->选项->项目和解决方案->VC++6.1 包含文件C:\Program Files\MVTec\HALCON-10.0\include;C:\ProgramFiles\MVTec\HALCON-10.0\include\cpp6.2 库文件C:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32经过以上六步,恭喜你,VS 2008配置Halcon 10算是大功告成。
接下来就是好戏上演的时刻了,我们要开始编代码来演示我们的例子了。
第七步:在1_VS08MFC_H10_01Dlg.h文件开始处,添加代码:#include "halconcpp.h"using namespace Halcon;注意,如果你安装的Halcon版本是11.0.0.1的话,实际上这个版本仍然和Halcon10一样,使用的是Halcon命名空间,而不是HalconCpp。
本文由syqflying贡献doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT或下载源文件到本机查看。
功能包编程简介第13 章MFC 功能包编程简介VS08 SP1 所含的VC08 的MFC 功能包MFC Feature Pack for Visual C 2008 在MFC 9.0 的基础上增加137 个新类及86 个内部类和1 个新结构。
功能包对传统MFC 库进行了扩展以支持时髦的现代用户界面元素如Office Fluent流畅UI、停靠窗口和MDI 选项卡tab窗口似Visual Studio 2005/2008 、增强型工具条、丰富的新控件集、支持总体视觉样式overall visual style 、支持桌面报警desktop alerts等等。
程序员可以利用该功能包编写具有类似于微软公司新版的Microsoft Office、Visual Studio 或Internet Explorer 等流行界面视觉样式的应用程序。
MFC 功能包的改进主要体现在新型用户界面上主要包括功能区ribbon 、选项卡tab窗口和窗格pane 、视觉样式切换换肤、可停靠与自动隐藏的控制条和窗格等。
MFC 功能包的帮助信息位于MSDN 的“目录开发工具和语言Visual Studio 文档Visual C参考信息Libraries ReferenceMFC Feature Pack for Visual C 2008” 主要内容在其“ReferenceClasses”子目录中。
在VS2010 中MFC 功能包已被完全并入MFC所以其帮助系统也被并入标准的MFC 帮助系统之中位于MSDN 的“目录开发工具和语言Visual Studio 文档Visual C参考信息Libraries ReferenceMFC” 主要内容也在其“Classes”子目录中。
13.1 新增功能MFC 功能包在用户界面方面增加了许多新功能包括对传统界面元素的改进和若干新增的界面元素。
VS2008中C++打开Excel(MFC)第一步:建立project选择C++下的MFC Application选择dialog based,中文。
之后点击finish第二步:导入EXCEL头文件选择Project->Add Class->MFC Class From Typelib后,点击Add,进入MFC Class From Typelib Wizard对话框下,选择Microsoft Excel 11.0 Object Library<1.5>(我用的是Microsoft Office2003)将上图中Class添加进来。
点击finish并在TExcel.cpp开始添加:#include"CRange.h"#include"CSheets.h"#include"CWorkbook.h"#include"CWorkbooks.h"#include"CApplication.h"#include"CWorksheet.h"#include"CWorksheets.h"在每一个添加进来的头文件中去掉#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace第三步:打开COM口添加AfxOleInit();第四步:建一个Button按钮选择Toolbox中的Button在TExcel.rc的IDD_TEXCEL_DIALOG中点击,建立如上图的Button按钮将属性中的Caption修改为“打开Excel”第五步:为Button按钮编写程序双击“打开Excel”在// TODO: Add your control notification handler code here后添加如下程序:CApplication objApp;//判断是否存在EXCEL应用程序CWorkbooks objBooks;CWorkbook objBook;CWorksheets objSheets;CWorksheet objSheet;CRange objRange,usedRange;//单元格获取VARIANT ret;objApp.CreateDispatch(_T("Excel.Application"));//判断是否存在EXCEL应用程序COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);objApp.put_Visible(TRUE);objApp.put_UserControl(TRUE);LPDISPATCH pwkbooks=objApp.get_Workbooks();objBooks.AttachDispatch(pwkbooks,TRUE);char currentprogrampath[MAX_PATH];objBooks=objApp.get_Workbooks();objBook=objBooks.Add(VOptional);objSheets=objBook.get_Sheets();CString str;str="A1";objSheet=objSheets.get_Item(COleVariant((short)1));objRange=objSheet.get_Range(COleVariant(str),COleVariant(str));objRange=objSheet.get_Range(COleVariant(_T("C4")),COleVariant(_T("B4")));objRange.put_Formula(COleVariant(_T("=RAND()*100000")));objRange.put_NumberFormat(COleVariant(_T("$0.00")));usedRange=objRange.get_EntireColumn();usedRange.AutoFit();第六步:避免Error 2 error C2059: syntax error : ','将CRange.h下VARIANT DialogBox()改为VARIANT _DialogBox()最后运行:。
一、创建MFC首先创建一个MFC对话框应用程序(Dialog-based Application)如下:在VS2005和2008里,我们可以用一个 Solution 来组合几个 Project (每个 Project 基本上只包含一个 Program),当我们要构建一个多Program的应用时(例如一个客户端程序加一个服务器应用程序),利用 Solution 可以将这些Projects 组合起来、并且共享文件和函数库。
通常需要为Solution创建一个主路径,其中包含了所有Projects的路径。
不过在这篇文章里,我们只构建一个简单的Project,所以在创建MFC的New Project对话框里,不用勾选“Create directory for solution”这个选项。
点击OK -- Next进入下一步,在这里我们创建一个Dialog-based Application,大部分选项按默认设置就行,不过最下面的“Use Unicode libraries”最好去掉。
如果勾选了这个选项,程序代码就会使用16bit的Unicode字符集来编码,但是很多函数虽然使用 char* (ASCII stings) 类型字符,而将字符串从 Unicode 转换到 ASCII 是非常麻烦的。
使用Unicode 在编译时可能会遇到下列错误:cannot convert parameter 1 from 'CString' to 'const char *'cannot convert from 'const char [11]' to 'LPCWSTR'这意味着在Unicode 和Multi-byte字符串的转换中出现了问题。
在上一篇学习笔记中,就提到“成员函数LoadBMP其输入参数类型应为const char*”,那应该只是一个治标的方法,这里的去掉“Use Unicode libraries”选项,才是治本之道。
visual studio 2008 c语言程序
Visual Studio 2008 可以用来编写和调试 C 语言程序。
以下是一个简单的 C 语言程序示例,你可以在 Visual Studio 2008 中创建一个新的 C 项目并输入这个代码:
```c
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
```
要创建一个新的 C 项目,请按照以下步骤操作:
1. 打开 Visual Studio 2008。
2. 在“文件”菜单中选择“新建”->“项目”。
3. 在“新建项目”对话框中,选择“Visual C++” -> “Win32” -> “Win32 控制台应用程序”。
4. 输入项目名称,选择项目位置,然后点击“确定”。
5. 在“Win32 控制台应用程序向导”中,选择“空项目”,然后点击“完成”。
6. 在解决方案资源管理器中,右击“源文件”,选择“添加” -> “新建项”。
7. 在“添加新项”对话框中,选择“C++ 文件(.cpp)”,输入文件名,然后点击“添加”。
8. 将上面的 C 语言代码粘贴到新创建的 C++ 文件中,保存并编译。
9. 运行程序,你应该会在控制台窗口中看到“Hello, World!”的输出。
请注意,上述步骤假设你已经安装了 Visual Studio 2008 和相关的C/C++ 开发工具。
如果你还没有安装这些工具,你需要先下载并安装它们。
MFC编程例题(VS2008)
编写一个可以对用户输入的两个数值进行加、减、乘、除运算的简单计算器。
图5.1 创建一个名为calculator的MFC应用程序
图5.2 选择“基于对话框”,并一路点击“下一步”一直到完成,或者在此点击完成
图5.3 图5.2完成后,出现一个对话框。
点击右边的工具箱,出现对话框编辑器
图5.4 删除原对话框中的静态文本控件,并选择工具箱中的控件到对话框中
图5.5 选择控件,右边出现该控件的属性。
根据图5.6中的表格,修改控件ID ,Caption 等
图5.6 对话框中控件的修改,添加变量和添加事件处理程序
图5.7 右键选择编辑框控件,点击“添加变量”
图5.8 为控件添加变量
图5.9 为Button控件添加事件处理程序
图5.10 选择合适的消息类型,并添加编辑
图5.11 图5.10完成后,所生成的消息处理函数
图5.12 在消息处理函数中,添加合适的代码,调试运行
图5.13 基于对话框的MFC应用程序:简单的计算器
图5.14 根据用户输入的值和选择,点击按钮(=),显示计算结果。
Vs2008下如何建立一个MFC的应用程序。
1、依次点击文件,新建,项目,如下图所示图一2、在弹出的图二中,选中“MFC”,然后选择“MFC应用程序”,在相应框中输入项目名称。
按确定按钮,出现图三。
注意:如果接受“创建解决方案的目录”,则会在工程名目录下又产生一个以工程名为名的子目录,在该子目录下有该工程所有的源文件。
图二图三3、图三是项目wingreet的缺省设置。
按《下一步》按钮,就进入图四的《MFC 应用程序向导的应用程序类型》,按照图四中的选择图四 MFC 应用程序向导的应用程序类型使用Unicode 库指定是使用Unicode 版MFC 库还是使用非Unicode 版MFC 库。
视觉样式和颜色确定应用程序的视觉样式。
下列选项可用:Windows 本机/默认设置Office 2003Visual Studio 2005Office 2007 (蓝色主题)Office 2007 (黑色主题)Office 2007 (银色主题)Office 2007 (水绿色主题)启用视觉样式切换指定在运行时,用户通常是否可以通过从菜单或工作区中选择适当的视觉样式来更改应用程序的视觉样式。
4、按《下一步》按钮,弹出图五。
图五5、接收缺省设置,按《下一步》按钮,弹出图六。
图六6、按《下一步》按钮,弹出图七。
图七7、按《下一步》按钮,弹出图八。
图八8、在图八中按图中所示选择,按《下一步》按钮,弹出图九。
9、在图九中按图中所示进行选择,按《下一步》按钮,弹出图十。
图十10、按《完成》按钮,出现主界面。
图十一按F5 键,编译连接,如果没错误,会在目录下的debug子目录下生成可执行文件wingreet.exe,然后开始运行。
出来的窗口如下:如何打开工程或解决方案在win7下先打开vs2008再打开工程,后缀是vcproj技巧:(1)工具箱不显示”自动隐藏”,即“自动隐藏”变灰的解决办法出现工具箱窗口后,双击该工具箱窗口(2)删除类中的函数vc6 中可以通过选中该函数,右键单击出现快捷菜单,在菜单中有Delete。
VS2008?MFC如何做属性页用VS2008 MFC做属性页思路庭博网校原创,转载请指明出处第一步:新建一个单文档的工程;第二步:在资源的菜单中加入一个调用属性对话框的菜单,代码先不要写;第三步:再在资源中插入三个对话框,目的是用它们做三个属性页。
并设他们的Border thin;Style:Child;这里caption的值就是成功运行后它们在属性页中的标签了。
第四步:将这三个对话框分别做成类的形式,关键技术点是这三个对话框类要继承于CPropertyPage类。
以上四步完成后,有人会问,这三个属性页放在哪个框架中呢?是不是还要加一个对话框类做CPropertySheet呢?回答是不用做对话框了。
但是必须在“类视图”中添加一个MFC 的新类,并且这个新类要继承于CPropertyPage,这是又是一个关键技术点;不需要在这个类中加入任何代码,呵呵。
如何你一定要加代码,比如想改一下属性对话框的尺寸什么的,就把这个类重载一个OnInitDialog();在这里去修改属性对话框的窗口。
说到这里,有人会问:这个属性对话框究竟是多大呢?答案是:它以你做得三个对话框中的最大的那人为准。
页面何时加到属性框架中呢?这正是我要往下讲的:打开资源文件中的menu菜单,为刚才加入的菜单编辑代码,对于单文档工程,菜单要选view类才行哦,说明菜单是为视图服务的。
呵呵,原来,属性框架和属性页是在这个地方联系起来的哟!典型代码:void CmypropertyView::On32771(){// TODO: 在此添加命令处理程序代码CMyPropSheet pt1(_T("属性对话框范例")); CMypro1 m_p1;CMypro2 m_p2;CMypro3 m_p3;pt1.AddPage(&m_p1);pt1.AddPage(&m_p2);pt1.AddPage(&m_p3);pt1.DoModal();}编译运行就可以了。
Visual Studio2008教程Visual Studio2008发布后,有大量的爱好者抛弃原来的Visual Studio2005平台转向现在流行的Visual Studio2008平台。
但是Visual Studio2008有一个缺点就是需要比较高的硬件配置才能正常平稳的运行,所以到现在为止还有一部分人处于观望中,并没有转向这个平台。
然而Visual Studio2008的一些新的功能以及优化性比先前版本有了很大的进步。
本篇文章将主要介绍怎样利用去编写一个计算器程序,程序虽然不复杂,但是其中所运用的知识和代码非常具有代表性,在平时开发中也是经常需要用到的。
希望对2008的初学者带来帮助。
打开 Visual Studio 2008。
在文件 (File) 菜单上,单击新建项目 (New Project)。
在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。
单击确定 (OK)。
在Form1窗体中添加一个TextBox1控件和19个Button按钮,详细属性设置请查看以下的表格。
TextBox1 数据显示框Button1 0Button2 .Button3 归零Button4 无Button5 =Button6 1Button7 2Button8 3Button9 +Button10 -Button11 4Button12 5Button13 6Button14 *Button15 /Button16 7Button17 8Button18 9Button19 ONButton20 OFF详细的界面请查看图1图1好了基本的界面已经设计好了,接下来我们来添加相应的代码了,首先进行必要的声明事件。
Public Class Form1Dim strdx() As String = {"0", "0", "0"} '声明一个字符串,用以存取数值Dim calcount1 As String = "0"Dim calcount2 As String = "0"Dim strvalue As Boolean = False然后需要进入Button1.Click事件中.代码如下Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickIf strdx(0) = "0"ThenTextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "0"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "0"TextBox1.Text = strdx(0)End IfEnd Sub进入Button2.Click事件中.代码如下Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Clickstrvalue = Truestrdx(0) = strdx(0) & "."TextBox1.Text = strdx(0)End Sub进入Button3.Click事件中.代码如下Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Clickstrdx(0) = "0"strdx(1) = "0"strdx(2) = "0"calcount1 = "0"calcount2 = "0"strvalue = FalseTextBox1.Text = "0."End Sub进入Button5.Click事件中.代码如下Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.ClickIf strdx(2) = "0"ThenSelect Case calcount1Case"+"TextBox1.Text = Str(Val(strdx(1)) + Val(strdx(0))) Case"-"TextBox1.Text = Str(Val(strdx(1)) - Val(strdx(0))) Case"*"TextBox1.Text = Str(Val(strdx(1)) * Val(strdx(0))) Case"/"If strdx(0) = "0"ThenTextBox1.Text = "error!"ElseTextBox1.Text = Str(Val(strdx(1)) /Val(strdx(0)))End IfEnd SelectElseIf calcount2 = "*"Thenstrdx(0) = Str(Val(strdx(0)) * Val(strdx(2)))Select Case calcount1Case"+"TextBox1.Text = Str(Val(strdx(1)) + Val(strdx(0))) Case"-"TextBox1.Text = Str(Val(strdx(1)) - Val(strdx(0))) Case"*"TextBox1.Text = Str(Val(strdx(1)) * Val(strdx(0)))Case"/"If strdx(0) = "0"ThenTextBox1.Text = "error!"ElseTextBox1.Text = Str(Val(strdx(1)) /Val(strdx(0)))End IfEnd SelectElse : calcount2 = "/"strdx(0) = Str(Val(strdx(2)) / Val(strdx(0)))Select Case calcount1Case"+"TextBox1.Text = Str(Val(strdx(1)) + Val(strdx(0))) Case"-"TextBox1.Text = Str(Val(strdx(1)) - Val(strdx(0))) Case"*"TextBox1.Text = Str(Val(strdx(1)) * Val(strdx(0))) Case"/"If strdx(0) = "0"ThenTextBox1.Text = "error!"ElseTextBox1.Text = Str(Val(strdx(1)) /Val(strdx(0)))End IfEnd SelectEnd IfEnd Sub进入Button6.Click事件中.代码如下Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.ClickIf strdx(0) = "0"Thenstrdx(0) = "1"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "1"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "1"TextBox1.Text = strdx(0)End IfEnd Sub进入Button7.Click事件中.代码如下Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.ClickIf strdx(0) = "0"Thenstrdx(0) = "2"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "2"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "2"TextBox1.Text = strdx(0)End IfEnd Sub进入Button8.Click事件中.代码如下Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.ClickIf strdx(0) = "0"Thenstrdx(0) = "3"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "3"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "3"TextBox1.Text = strdx(0)End IfEnd Sub进入Button9.Click事件中.代码如下Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.ClickIf calcount1 = "0"Thencalcount1 = "+"strdx(1) = strdx(0)strdx(0) = "0"Else : Select Case calcount1Case"+"strdx(1) = Str(Val(strdx(0)) + Val(strdx(1))) strdx(0) = "0"calcount1 = "+"Case"-"strdx(1) = Str(Val(strdx(1)) - Val(strdx(0))) strdx(0) = "0"calcount1 = "+"Case"*"strdx(1) = Str(Val(strdx(0)) * Val(strdx(1))) strdx(0) = "0"calcount1 = "+"Case"/"strdx(1) = Str(Val(strdx(1)) / Val(strdx(0))) strdx(0) = "0"calcount1 = "+"End SelectEnd IfEnd Sub进入Button10.Click事件中.代码如下Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.ClickIf calcount1 = "0"Thencalcount1 = "-"strdx(1) = strdx(0)strdx(0) = "0"Else : Select Case calcount1Case"+"strdx(1) = Str(Val(strdx(0)) + Val(strdx(1))) strdx(0) = "0"calcount1 = "-"Case"-"strdx(1) = Str(Val(strdx(1)) - Val(strdx(0))) strdx(0) = "0"calcount1 = "-"Case"*"strdx(1) = Str(Val(strdx(0)) * Val(strdx(1))) strdx(0) = "0"calcount1 = "-"Case"/"strdx(1) = Str(Val(strdx(1)) / Val(strdx(0))) strdx(0) = "0"calcount1 = "-"End SelectEnd IfEnd Sub进入Button11.Click事件中.代码如下Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.ClickIf strdx(0) = "0"Thenstrdx(0) = "4"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "4"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "4"TextBox1.Text = strdx(0)End IfEnd Sub进入Button12.Click事件中.代码如下Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.ClickIf strdx(0) = "0"Thenstrdx(0) = "5"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "5"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "5"TextBox1.Text = strdx(0)End IfEnd Sub进入Button13.Click事件中.代码如下Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.ClickIf strdx(0) = "0"Thenstrdx(0) = "6"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "6"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "6"TextBox1.Text = strdx(0)End IfEnd Sub进入Button14.Click事件中.代码如下Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.ClickIf calcount1 = "0"Thencalcount1 = "*"strdx(1) = strdx(0)strdx(0) = "0"Else : Select Case calcount1Case"+"calcount2 = "*"strdx(2) = strdx(0)strdx(0) = "0"Case"-"calcount2 = "*"strdx(2) = strdx(0)strdx(0) = "0"Case"*"strdx(1) = Str(Val(strdx(0)) * Val(strdx(1)))strdx(0) = "0"calcount1 = "*"Case"/"strdx(1) = Str(Val(strdx(1)) / Val(strdx(0)))strdx(0) = "0"calcount1 = "*"End SelectEnd IfEnd Sub进入Button15.Click事件中.代码如下Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.ClickIf calcount1 = "0"Thencalcount1 = "/"strdx(1) = strdx(0)strdx(0) = "0"Else : Select Case calcount1Case"+"calcount2 = "/"strdx(2) = strdx(0)strdx(0) = "0"Case"-"calcount2 = "/"strdx(2) = strdx(0)strdx(0) = "0"Case"*"strdx(1) = Str(Val(strdx(0)) * Val(strdx(1))) strdx(0) = "0"calcount1 = "/"Case"/"strdx(1) = Str(Val(strdx(1)) / Val(strdx(0))) strdx(0) = "0"calcount1 = "/"End SelectEnd IfEnd Sub进入Button16.Click事件中.代码如下Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.ClickIf strdx(0) = "0"Thenstrdx(0) = "7"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "7"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "7"TextBox1.Text = strdx(0)End IfEnd Sub进入Button17.Click事件中.代码如下Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.ClickIf strdx(0) = "0"Thenstrdx(0) = "8"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "8"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "8"TextBox1.Text = strdx(0)End IfEnd Sub进入Button18.Click事件中.代码如下Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.ClickIf strdx(0) = "0"Thenstrdx(0) = "9"TextBox1.Text = strdx(0) & "."ElseIf strvalue = False Thenstrdx(0) = strdx(0) & "9"TextBox1.Text = strdx(0) & "."Elsestrdx(0) = strdx(0) & "9"TextBox1.Text = strdx(0)End IfEnd Sub进入Button19.Click事件中.代码如下Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.ClickTextBox1.Text = "0."End Sub进入Button20.Click事件中.代码如下Private Sub Button20_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button20.ClickMe.Close()End Sub最后的代码如图2:图2程序代码输入完成,接下来我们来运行一下程序,进行测试。