VC知识库文章为你的MFC程序添加宏脚本语言
VS2024之MFC入门到精通教程

VS2024之MFC入门到精通教程MFC(Microsoft Foundation Classes)是微软公司开发的一套基于C++的应用程序框架,旨在简化Windows应用程序的开发。
本文将为你介绍如何从MFC的入门到精通。
MFC是一个功能强大且复杂的框架,因此在学习MFC之前,你应该对C++语言有一定的了解。
了解基本的C++语法、类和对象的概念以及面向对象编程的思想是非常重要的。
首先,你需要安装Visual Studio 2024开发环境,这是一个包含MFC框架的集成开发环境。
安装完成后,你可以创建一个新的MFC应用程序项目。
在创建项目时,你可以选择使用MFC应用程序向导来生成基本的MFC 应用程序结构。
这个向导将帮助你创建一个带有窗口、对话框和控件的桌面应用程序。
一旦你创建了MFC应用程序项目,你就可以开始学习如何操作和管理窗口、对话框和控件了。
MFC提供了一组类和函数来处理用户界面相关的任务,如创建窗口、处理消息和响应用户输入等。
了解和掌握MFC的消息映射机制也是非常重要的。
MFC使用消息映射来处理窗口消息,如点击按钮、鼠标移动或键盘按键等。
你需要了解如何在MFC应用程序中添加消息映射函数,以便正确地处理用户的操作。
此外,MFC还提供了许多其他功能和特性,如数据库访问、多线程编程和国际化支持等。
如果你想进一步提升你的MFC编程技能,你可以深入学习这些领域。
最后,记得在学习MFC过程中多做实践。
尝试创建自己的项目并实现一些简单的功能,这将帮助你更好地理解和应用MFC框架。
总结起来,MFC是Windows应用程序开发的重要工具之一,它提供了丰富的类和函数来简化应用程序开发。
通过学习MFC的基本概念、操作和技巧,你可以成为一名熟练的MFC开发者。
VC知识库文章为你的MFC程序添加宏脚本语言

为你的MFC程序添加宏脚本语言原著: Ernest Laurentin翻译:haily下载源代码屏幕截图简介我总是对脚本控件(msscript.ocx)如何使用和当需要使用的时候,C++ 开发者该如何应对感到惊奇。
可能扩展名(.ocx)使他们觉得,那是vb!在本文中,我将解决这些界限,给出 C++ 开发者使用它的新的理由。
问题描述由于MS开发者的努力而创造的 Windows 脚本技术,使在VB和 C++ 应用中使用vbScript和Jscript变得相当简单的。
开发者只需要知道如何使用Microsoft脚本控件和如何给一个脚本方法传值就可以了。
由此,首先我想要提出的一个包容类是CScriptObject。
这个包容类的使用是非常简单的,她提供了你将会在你应用程序中使用的大部分功能。
它能提供从文件和资源中中载入脚本(文本数据),得到方法列表,选择脚本语言和执行函数和语句的功能。
本类不依赖于MFC,能在控制台程序(console Application)中使用。
对脚本调用首先最重要的是要了解VBScript和Jscript只能处理VARIANT类型的参数。
这就是我建立CSafeArrayHelper类的原因了。
CSafeArrayHelper包容类允许你建立你将要传给你的Script函数的的参数。
class CSafeArrayHelper{public:CSafeArrayHelper();~CSafeArrayHelper();bool Create(VARTYPE vt, UINT cDims, UINT lBound, UINT cCount);bool Destroy();UINT GetDimension();bool Attach(LPSAFEARRAY psa);bool AttachFromVariant(VARIANT* pVariant);LPSAFEARRAY Detach();LPSAFEARRAY GetArray();bool AccessData(void FAR* FAR* pvData);bool UnaccessData();bool Lock();bool Unlock();bool PutElement(long lIndices, void FAR* vData);bool GetElement(long lIndices, void FAR* vData);VARIANT GetAsVariant();protected:LPSAFEARRAY m_pSA;private:};它提供和SAFEARRAY对象同样的功能,但是它对于我们某些人(比如我)来说,使用更简单。
MFC自定义控件编写过程

MFC自定义控件编写过程MFC(Microsoft Foundation Class)是微软公司在Windows操作系统上开发的一套C++应用程序框架。
它提供了一系列的类和函数,使得开发者可以更快、更方便地开发Windows应用程序。
在MFC中,我们可以根据需要自定义控件。
编写MFC自定义控件的过程主要包括以下几个步骤:1.定义控件类:首先,我们需要定义一个派生自CWnd或CButton等基类的控件类。
派生类通常以"C"作为前缀,例如CCustomControl。
在控件类中,我们可以添加自定义的属性和方法。
2.注册控件类:在应用程序初始化时,我们需要调用AfxRegisterClass函数来注册自定义的控件类,以便能够在程序中使用。
3.创建控件对象:在创建控件的对话框或窗口时,我们需要使用Create函数来创建自定义的控件对象。
在Create函数中,我们可以指定控件的位置、大小等属性。
4.响应消息:在控件类中,我们可以重写一些成员函数来响应用户的消息,例如鼠标点击、键盘输入等。
我们可以使用ON_WM_XXX宏将消息和相应的成员函数关联起来。
5.绘制控件:在绘制控件时,我们可以重写控件类的OnPaint函数。
在OnPaint函数中,我们可以使用CDC类的成员函数来绘制自定义的图形。
6.响应交互:根据自定义的需求,我们可以在控件类中重写一些成员函数来响应用户的交互。
例如,在Button控件中,我们可以重写OnLButtonDown函数来响应鼠标左键的点击事件。
7.添加消息处理:在控件类中,我们可以添加自定义的消息处理函数来处理特定的业务逻辑。
例如,在自定义的列表框中,我们可以添加一个AddItem函数来向列表中添加项目。
8.发送和接收消息:在需要与其他窗口或控件进行通信时,我们可以使用SendMessage和PostMessage函数来发送消息,并在控件类中重写相应的消息处理函数来接收并处理这些消息。
MFC程序设计范文

MFC程序设计范文MFC(Microsoft Foundation Classes)是一种用于Windows操作系统的C++类库,它是Microsoft Visual C++应用程序开发的重要组成部分。
MFC提供了一种基于对象的编程模型,可以大大简化Windows GUI(图形用户界面)应用程序的开发过程。
通过MFC库,开发人员可以利用现有的类和功能来创建强大、可靠且可扩展的Windows应用程序。
在MFC程序设计中,通常需要遵循以下步骤:1. 创建一个MFC应用程序项目:首先,在Visual Studio中创建一个新的MFC应用程序项目。
在项目配置向导中,选择应用程序类型(对话框型、SDI型或MDI型)、支持的功能(ActiveX控制和OLE支持)、使用的界面风格等。
2. 编写应用程序代码:在MFC应用程序项目中,主要的代码文件是CWinApp类的派生类和CWnd类的派生类。
- CWinApp类的派生类通常包含应用程序的初始化和结束代码,包括应用程序的全局设置、消息处理程序的注册和初始化等。
- CWnd类的派生类通常用于创建主窗口或对话框,处理消息、事件和用户交互。
3. 设计用户界面:通过Visual Studio的可视化设计器,可以方便地设计应用程序的用户界面。
可以通过拖放控件、调整属性和布局来创建界面元素,如按钮、文本框、列表框等。
4.实现功能代码:在MFC应用程序中,可以使用MFC库提供的丰富功能和类来实现各种功能,如文件操作、数据库访问、多线程处理等。
5. 编译和调试程序:完成代码编写后,可以通过Visual Studio的编译器和调试器来编译和调试应用程序。
可以通过断点、单步执行等功能来查看程序的执行过程和变量的值。
6.发布应用程序:完成调试后,可以将应用程序打包成可执行文件,然后发布给用户使用。
可以将可执行文件、相关的库文件和资源文件打包成安装程序,通过安装程序来安装和部署应用程序。
MFC使用教程范文

MFC使用教程范文MFC(Microsoft Foundation Classes)是微软的一套C++类库,用于开发Windows桌面应用程序。
本教程将向您介绍MFC的基本概念和使用方法。
一、MFC简介MFC是基于面向对象的设计思想,为开发Windows应用程序提供了一套强大的工具和框架。
它提供了诸如窗口、对话框、菜单等常见界面元素的类,并且封装了底层的Windows API,简化了程序的编写过程。
二、MFC应用程序的创建要创建一个MFC应用程序,您可以使用Visual Studio进行操作。
首先,打开Visual Studio,并选择“新建项目”,然后选择“MFC应用程序”模板。
在创建项目的向导中,您可以指定应用程序的名称、位置和其他选项。
接下来,您可以选择所需的特性和模板。
例如,如果需要创建一个对话框应用程序,则可以选择“对话框”模板。
创建完成后,Visual Studio将自动为您生成一个基本的MFC应用程序框架,包括一个主窗口、一个菜单栏、一个工具栏和一个状态栏。
三、MFC界面元素的创建和使用1. 窗口(CWnd类):MFC提供了多种窗口类,如CFrameWnd、CView 等,您可以根据需要选择合适的窗口类来创建窗口。
4. 菜单(CMenu类):MFC通过CMenu类来管理菜单。
您可以创建菜单项并将其添加到菜单中,然后将菜单与窗口相关联。
5. 工具栏(CToolBar类):工具栏是一种常见的界面元素,用于提供快速访问常用命令的按钮。
您可以通过CToolBar类创建和管理工具栏,并将其与窗口相关联。
四、MFC消息机制在MFC中,程序通过消息来进行事件处理。
消息是由操作系统发送给应用程序的,应用程序通过重载消息响应函数来处理不同类型的消息。
在MFC中,您可以通过添加消息映射宏(BEGIN_MESSAGE_MAP和END_MESSAGE_MAP)和消息处理函数(OnXxx系列函数)来处理消息。
vs2008mfc教程

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控件使用详细教程

MFC控件使用详细教程MFC(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。
它提供了许多方便易用的控件,可以快速创建用户界面。
本教程将详细介绍如何使用MFC控件来创建Windows应用程序。
第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。
在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。
在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。
第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。
例如,当用户点击按钮时,可以执行一些特定的操作。
要实现这个功能,需要添加控件消息处理程序。
可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。
在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。
在消息处理函数中,可以编写代码来实现特定的功能。
第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。
例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。
可以使用类似的方式来处理其他控件的事件。
例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。
第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。
在编译过程中,会生成可执行文件和相关的依赖文件。
MFC宏定义详解

很不错的一篇文章,很多不明白的地方在此讲的很清楚,很完整,主要是MFC的宏定义了.站长黑森林推荐!AND_CATCHAND_CATCHAND_CATCH(exception_class,exception _object_point_name)说明:定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。
使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。
在AND_CATCH块中调用THROW_LAST宏以便把处理过程移到下个外部异常框架。
AND_CATCH可标记CATCH或AND_CATCH块的末尾。
注释:AND_CATCH块被定义成为一个C++作用域(由花括号来描述)。
若用户在此作用域定义变量,那么记住他们只在此作用域中可以访问。
他也用于exception_object_pointer_name变量。
ASSERTASSERT(booleanExpression)说明:计算变量的值。
如果结构的值为0,那么此宏便打印一个诊断消息并且成讯运行失败。
如果条件为非0,那么什么也不做。
诊断消息的形式为: assertion failed in file in line 其中name是元文件名,num是源文件中运行失败的中断号。
在Release版中,ASSERT不计算表达式的值也就不中断程序。
如果必须计算此表达式的值且不管环境如何那么用VERIFY 代替ASSERT。
注释:ASSERT只能在Debug版中用ASSERT_VAILDASSERT_VAILD(pObject)说明:用于检测关于对象的内部状态的有效性。
ASSERT_VALID调用此对象的AssertValid成员函数(把它们作为自己的变量来传递)。
在Release版中ASSERT_VALID什么也不做。
在DEBUG版中,他检查指针,以不同于NULL的方式进行检查,并调用对象自己的AssertValid成员函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为你的MFC程序添加宏脚本语言
原著: Ernest Laurentin
翻译:haily
下载源代码
屏幕截图
简介
我总是对脚本控件(msscript.ocx)如何使用和当需要使用的时候,C++ 开发者该如何应对感到惊奇。
可能扩展名(.ocx)使他们觉得,那是vb!在本文中,我将解决这些界限,给出 C++ 开发者使用它的新的理由。
问题描述
由于MS开发者的努力而创造的 Windows 脚本技术,使在VB和 C++ 应用中使用vbScript和Jscript变得相当简单的。
开发者只需要知道如何使用Microsoft脚本控件和如何给一个脚本方法传值就可以了。
由此,首先我想要提出的一个包容类是CScriptObject。
这个包容类的使用是非常简单的,她提供了你将会在你应用程序中
使用的大部分功能。
它能提供从文件和资源中中载入脚本(文本数据),得到方法列表,选择脚本语言和执行函数和语句的功能。
本类不依赖于MFC,能在控制台程序(console Application)中使用。
对脚本调用首先最重要的是要了解VBScript和Jscript只能处理VARIANT类型的参数。
这就是我建立CSafeArrayHelper类的原因了。
CSafeArrayHelper包容类允许你建立你将要传给你的Script函数的的参数。
class CSafeArrayHelper
{
public:
CSafeArrayHelper();
~CSafeArrayHelper();
bool Create(VARTYPE vt, UINT cDims, UINT lBound, UINT cCount);
bool Destroy();
UINT GetDimension();
bool Attach(LPSAFEARRAY psa);
bool AttachFromVariant(VARIANT* pVariant);
LPSAFEARRAY Detach();
LPSAFEARRAY GetArray();
bool AccessData(void FAR* FAR* pvData);
bool UnaccessData();
bool Lock();
bool Unlock();
bool PutElement(long lIndices, void FAR* vData);
bool GetElement(long lIndices, void FAR* vData);
VARIANT GetAsVariant();
protected:
LPSAFEARRAY m_pSA;
private:
};
它提供和SAFEARRAY对象同样的功能,但是它对于我们某些人(比如我)来说,使用更简单。
当你想看你包装在你的SAFEARRAY中的数据类型的时候,函数GetAsVariant可能会很有用。
由于SAFEARRAY的数据类型(fFeatures)不能处理
所有的类型,所以此函数也不能读取所有的数据类型。
也就是说,这个函数只是对数据类型的猜测。
如何使用
要使用这个控件,首先我推荐你看看VBScript和JScript的文档以了解你所有能在脚本语言里能实现的功能。
写一个脚本函数
假设我们想建立一个简单的函数来把温度从华氏度转换到摄氏度:
用 VBScript 写:
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
用 JScript 写:
function Celsius(fDegres)
{
return (fDegres-32)*5/9;
}
要执行这个函数,只需要把每个变量存储到VARIANT里。
由于你的函数(方法)可能包含不止一个参数,我们必须用一个SAFEARRAY来包装它。
在后一种情况,你可能想通过检查String函数的.length属性或其他的方法来看数组传给函数的参数的数目。
function CountParam(aParam)
{
var strPresent = "Parameter is : " + (aParam.length>0 ? "Present": "Not present");
return strPresent;
}
同样的技术可以用在VBScript中,它允许你在运行时检测变长参数。
调用无参数的函数,也要创建SAFEARRAY,只是没有参数。
调用一个脚本函数。
你的代码应该和下边的实例一样简单::
void CScriptDemoDlg::OnBtnExecute()
{
CString strParam, strProc;
m_ctlParameter.GetWindowText( strParam );
m_ctlFunctions.GetWindowText( strProc );
CSafeArrayHelper sfHelper;
try{
_variant_t var;
if (strProc.IsEmpty())
sfHelper.Create(VT_VARIANT, 1, 0, 0); // (void) parameter
else
{
sfHelper.Create(VT_VARIANT, 1, 0, 1); // 1 parameter
var = _bstr_t(strParam);
}
sfHelper.PutElement(0, (void*)&var); // parameter1 -> index 0
LPSAFEARRAY sa = sfHelper.GetArray();
_variant_t varRet;
if (m_ScriptObj.RunProcedure(strProc, &sa, &varRet))
m_ctlResult.SetWindowText( (LPCTSTR)(_bstr_t(varRet)) );
else
{
CString strError = m_ScriptObj.GetErrorString(); m_ctlResult.SetWindowText( strError );
}
}
catch(...)
{
CString strError = m_ScriptObj.GetErrorString();
m_ctlResult.SetWindowText( strError );
}
}
一点建议
你可以试试如下的做法:
1、你可以实现象插件一样的实现你的脚本行为,建议你将一个脚本资源放入
dll中并在运行时装入(也可以作为你程序的一部分)。
由此,你就会有特定模
块相关函数,比如:InitModule, ReleaseModule, btnOK_Click,
tnCancel_Click, LoadUserData(strUsername),
aveUserData(strUserData)等等,并且你的每一个dll将会去执行他们。
∙2、你可以用你的脚本去完成一个完整的任务,并且你会载入基于你的任务的脚本文件(类CscriptObject可以为你载入一个脚本文件)
例子:这个脚本开启"Calculator"程序。
∙function StartCalc()
∙{
∙ var WshShell = new ActiveXObject("WScript.Shell");
∙ var oExec = WshShell.Exec("calc");
∙ WshShell = null;
∙}
∙ 3. 你可以建立一个ActiveX对象,它的生存期可以比它在一个函数中调用生存期长。
∙var XML_Obj;
∙function StartModule()
∙{
∙ XML_Obj = new ActiveXObject("Msxml.DOMDocument");
∙ XML_Obj.async = false;
∙}
∙
∙function StopModule()
∙{
∙ XML_Obj = null;
∙}
∙
∙function LoadSettings(strFilename)
∙{
∙ XML_Obj.load(strFilename);
}
∙ 4. 还有一个情况就是你想直接执行你的脚本,你只要添加代码,不需要写一个函数…你试试把。
参考
Microsoft Windows Script Control
VBScript Documentation
JScript Documentation。