mfc dll回调函数 -回复

合集下载

ObjectARX开发环境下的AutoCAD对话框设计

ObjectARX开发环境下的AutoCAD对话框设计
ObjectARX开发环境下的AutoCAD对话框设计
袁梅李亚萍张竟
(武汉大学城市建设学院,湖北 武汉 430072)
摘要:在ObjectARX开发环境下,AutoCAD支持两种格式的对话框:PDB对话框和Windows机制的对话框。从简单实例出发,本文介绍了这两种格式的对话框设计。
关键词:ObjectARX;AutoCAD;PDB;MFC;对话框
}
以上只给出了主调用函数drive_main()和回调函数print_cb()、ok_cb()的部分代码,相当于ObjectARX应用程序中的用户程序主体函数部分,Mypdb.cpp中头文件部分、函数声明部分和接口函数部分和一般的ObjectARX应用程序要求相同,不再写出。必须注意,头文件中一定要有#include“adsdlg.h”。
Microsoft基础类库(MFC)给软件开发者提供了一种便捷快速建立标准的用户界面的方法。ObjectARX开发环境也提供了一系列基于MFC的用户界面类,我们可以使用这些类设计Windows风格的对话框。使用Windows对话框的ObjectARX应用程序将使自己的界面与AutoCAD内建对话框界面完全一致,且可与其它Windows应用程序紧密集成在一起,共享Windows的各种资源,而且程序的维护也非常方便。在ObjectARX应用程序中使用MFC最明显的优点是可以充分利用MSVC(Microsoft Visual C++)开发环境提供的先进技术和工具,实现程序界面的可视化设计。Windows对话框也是Autodesk极力推荐开发者使用的对话框。
在CAD软件开发中,对话框的设计是软件开发者非常关心的问题之一。AutoCAD除了使用命令行与用户进行交互外,还可使用对话框。对话框是一种边界固定的窗口,也是一种最先进、最流行的人机交互界面。运用对话框可以方便地实现程序设计时的数据传输和信息传输,,所以在当今的几乎所有的软件都要用到对话框界面与用户交流。在CAD的二次开发中,可以采用两种方式使用对话框技术:,一种是PDB格式,即使用AutoCAD系统本身提供的可编程对话框技术,另一种是使用Windows机制的对话框设计技术。

深入剖析wtl

深入剖析wtl

一、深入剖析WTL——Win32模型WTL 是Windows Template Library的缩写。

最初,WTL是由微软的ATL(Active Template Library)小组成员开发的一个SDK例子。

主要是基于ATL的对Win32 API的封装。

从2.0后,功能逐步完善,成为了一个完整的支持窗口的框架(windows framework)。

与MFC相比较,功能并没有MFC完善。

比如MFC支持doc/view架构,而WTL并不支持。

同时,WTL也没有Microsoft的官方支持。

但是,WTL是基于模版(template)的,其应用程序最小只有24KB,同时不象MFC,依赖DLL(MFC需要MFC42.DLL)。

WTL系列文章对WTL进行了深入剖析,希望能方便您对WTL有一个深入的理解,从而能得心应手的开发出高质量的Windows应用程序。

Win32的线程模型为了便于以后的探讨,首先看一下Win32的线程模型。

一个Win32应用程序(或进程)是由一个或多个并发的线程组成的,其中第一个启动的线程称为主线程。

Win32定义了两种类型的线程,界面线程和工作线程。

Win32的每个进程可以有一个或多个界面线程和/或多个工作线程。

界面线程拥有一个或多个窗口,拥有一个消息队列和其它属于界面线程的元素。

工作线程就是一般的线程,它没有窗口,没有消息队列。

界面线程通常有一个或几个窗口。

当某一个窗口有消息时,界面线程会调用相应的窗口函数(Windows Process)来处理该事件。

由于某消息循环由它界面线程处理,同时不必在乎是哪个线程发送消息的,因此,Windows会保证线程间的同步问题。

对于工作线程,线程间的同步必须由程序员来实现。

尽可能避免死锁和竞争出现。

Win32应用程序模型Win32应用程序可以分成两大类:控制台程序(console application)和窗口界面程序(windows GUI application)。

小白学UG二次开发_UGOpenUIStlyer对话框设计

小白学UG二次开发_UGOpenUIStlyer对话框设计

⼩⽩学UG⼆次开发_UGOpenUIStlyer对话框设计⼩⽩学UG⼆次开发 UGOpen UIStlyer 对话框设计本例参考《UG/Open API、MFC和COM 开发实例精解》黄勇,本例基本参照书中内容操作,没有做太⼤修改,能正常运⾏。

第⼀步,准备⼯作在UGII_USER_DIR⽬录⾥新建startup,application两个⽂件夹。

书中是这么说的,但是我只⽤到了application,startup我没有⽤到。

怎么设置环境变量我就不说了。

第⼆步,设计UI.UG 开始-》所有应⽤模块-》NX 6 之前版本UI样式编辑器选之前的版本主要为了降低开发难度。

进⼊UIStyler 对话框设计环境,新建⽂件。

⾥⾯有很多控件,⾃⼰试着点点看,探索下。

⾥⾯有对象浏览器,对话框和资源编辑器,对话框的标题和提⽰如下图所⽰,前缀名⽐较重要,直接关系到后续程序⽣成后的⼀些参数名称,我们这边设置为DIALOG_ACCESS。

设置如图所⽰的整数、实数、字符串和按钮控件,导航按键中按钮样式选项⾥选择的不同项会影响到后续的回调函数。

这⾥选择关闭。

整数,实数,字符串修改下标签和标识符。

这个会在对象浏览器⾥反应出来。

⽬前我还不会修改类型,就放着没管,如果有知道的,请帮忙解释下类型。

另外,我对回调函数的名称⽣成机制也不是很清楚,只是知道Back_cb应该是关闭对话框时触发的回调函数,action_3_act_cb 是按钮空间触发的回调函数,名字和书上不太⼀样,但是能正常实现功能。

完成后,另存为对话框到application,语⾔选C,对话框名称为access_dialog,在⽬录下会⽣成access_dialog.dlg,access_dialog.h,access_dialog_template.c 三个⽂件,进⼊⽂件夹,将最后⼀个⽂件改成access_dialog.cpp并保存。

按之前帖⼦的⽅法建⽴⼀个DDL⼯程,注意⽬录放在UGII_USER_DIR下,名称也为Dialog_Access.将access_dailog.h和access_dialog.cpp复制到⼯程中,添加到头⽂件和源⽂件中。

ObjectARX讲义

ObjectARX讲义

按需加载


命令调用


Registry:通过注册表
从其他程序 Registry
按请求 代理检测
实时
acrxLoadModule 参见PolySamp
30
© 2005 Autodesk
加载 ObjectARX 程序 II
3. 5. 6. Operating System 1. LoadLibrary
32位
8.0(Visual Studio C/C++ 2005)(安装SP1)
32位、64位
2010
Studio C/C++ 32位、64位 9.0(Visual 2008)(安装SP1)
22
© 2005 Autodesk
ObjectARX SDK 内容
SDK包含: 库文件和头文件 开发文档 示例程序 实用工具
25
© 2005 Autodesk
.ARX = .DLL + 2 输出函数


acrxEntryPoint acrxGetApiVersion
.DLL .ARX
ObjectARX APIs API
.ARX .DLL
.EXE AutoCAD
26
© 2005 Autodesk
主要的库 - I
AcRx 对象和类管理库 (rxapi.lib) AcEd AutoCAD 编辑器工具库 (acedapi.lib) AcDb AutoCAD 数据库对象库 (acdb17.lib) AcGi AutoCAD 图形接口库 (acgiapi.lib) AcGe AutoCAD 几何库 (acge17.lib)
3

UG二次开发在叶片锻造中的应用

UG二次开发在叶片锻造中的应用

UG二次开发在叶片锻造中的应用魏科;谢崴;王高潮【摘要】综合运用UG表达式法及UG二次开发工具UG/Open API,UG/Open MenuScript,UG/Open UIStyler和Visual C++ 6.0,根据叶片锻件的加工原理,开发叶片模锻参数化设计系统。

在该系统中,叶片锻件和锻模造型易于设计及修改。

对提高叶片模具设计的效率、缩短模具开发周期具有较强的实用价值,同时也为后期的叶片模具制造和有限元数值模拟做好了强大的铺垫。

%Combined with the method of UG expression and the tools of the UG secondary development including UG/ Open MenuScript, UG/Open UIStyler, UG/Open API and Visual C++ 6.0, blade die forging parametric design system was developed based on the blade forging process theory. In this system, the blade forging and die were easily designed and modified This method brings practical values for improving efficiency of blade forging die design and shortening the die development period, meanwhile, making a strong foundation for the following blade forging die manufacture and simulation by finite element method.【期刊名称】《精密成形工程》【年(卷),期】2011(000)006【总页数】5页(P66-69,92)【关键词】叶片锻造;参数化设计;UG二次开发【作者】魏科;谢崴;王高潮【作者单位】南昌航空大学航空制造工程学院,南昌330063;南昌航空大学航空制造工程学院,南昌330063;南昌航空大学航空制造工程学院,南昌330063【正文语种】中文【中图分类】TG312叶片在航空发动机、汽轮机和燃气轮机中起着能量转换的关键作用[1]。

VC++2008开发环境

VC++2008开发环境

2.3 调试环境
编写程序很可能会产生错误,找出错误的过程即调试 编写程序很可能会产生错误,找出错误的过程即调试(debug)。Visual 。 C++ 2008提供完整的调试环境。大致提供两种调试方式:一是“单 提供完整的调试环境。 提供完整的调试环境 大致提供两种调试方式:一是“ 步执行” 即将程序代码逐语句执行分析;二是设定“断点” 步执行”,即将程序代码逐语句执行分析;二是设定“断点”,通过 分析上下文环境及相关变量,分析错误。 分析上下文环境及相关变量,分析错误。 Visual C++ 2008将调试信息分为以下三种: 将调试信息分为以下三种: 将调试信息分为以下三种 (1) /Z7:生成包含用于调试器的完整符号调试信息的 文件。 :生成包含用于调试器的完整符号调试信息的.obj文件。符号 文件 调试信息包括变量的名称和类型,以及函数和行号。 调试信息包括变量的名称和类型,以及函数和行号。不生成任 文件。 文件是一个优点。 何.pdb文件。对于第三方库的发布者,不生成 文件 对于第三方库的发布者,不生成.pdb文件是一个优点。 文件是一个优点 但是,在链接和调试期间,用于预编译头的.obj文件是必需的。 文件是必需的。 但是,在链接和调试期间,用于预编译头的 文件是必需的 (2) /Zi:生成包含用于调试器的类型信息和符号调试信息的程序数据库 : (PDB)。符号调试信息包括变量的名称和类型,以及函数和行号。 。符号调试信息包括变量的名称和类型,以及函数和行号。 (3) /ZI:以支持“编辑并继续”功能的格式产生如上所述的程序数据 :以支持“编辑并继续” 如果想使用“编辑并继续”调试,则必须使用此选项。 库。如果想使用“编辑并继续”调试,则必须使用此选项。因为大多 数优化与“编辑并继续”不兼容,所以使用/ZI会禁用代码中的所有 数优化与“编辑并继续”不兼容,所以使用 会禁用代码中的所有 #pragma optimize语句。 语句。 语句

钩子程序

钩子程序

WH_JOURNALPLAYBACK Hook 使应用程序可以插入消息到系统消息队列。可以使用这个 Hook 回 放通 过 使 用 WH_JOURNALRECORD Hook 记录 下 来 的 连 续 的 鼠 标 和 键 盘 事 件 。 只 要 WH_JOURNALPLAYBACK Hook 已 经 安 装 , 正 常 的 鼠 标 和 键 盘 事 件 就 是 无 效 的 。 WH_JOURNALPLAYBACK Hook 是 全 局 Hook , 它 不 能 象 线 程 特 定 Hook 一 样 使 用 。 WH_JOURNALPLAYBACK Hook 返回超时值,这个值告诉系统在处理来自回放 Hook 当前消息之前 需要等待多长时间(毫秒) 。这就使 Hook 可以控制实时事件的回放。WH_JOURNALPLAYBACK 是 system-wide local hooks,它們不會被注射到任何行程位址空間。 (估计按键精灵是用这个 hook 做的) 7、WH_JOURNALRECORD Hook WH_JOURNALRECORD Hook 用来监视和记录输入事件。典型的,可以使用这个 Hook 记录连续的 鼠标和键盘事件, 然后通过使用 WH_JOURNALPLAYBACK Hook 来回放。 WH_JOURNALRECORD Hook 是全局 Hook,它不能象线程特定 Hook 一样使用。WH_JOURNALRECORD 是 system-wide local hooks,它們不會被注射到任何行程位址空間。 8、WH_KEYBOARD Hook 在应用程序中,WH_KEYBOARD Hook 用来监视 WM_KEYDOWN and WM_KEYUP 消息,这些消息通过 GetMessage or PeekMessage function 返回。可以使用这个 Hook 来监视输入到消息队列中 的键盘消息。 9、WH_KEYBOARD_LL Hook WH_KEYBOARD_LL Hook 监视输入到线程消息队列中的键盘消息。 10、WH_MOUSE Hook WH_MOUSE Hook 监视从 GetMessage 或者 PeekMessage 函数返回的鼠标消息。使用这个 Hook 监视输入到消息队列中的鼠标消息。 11、WH_MOUSE_LL Hook WH_MOUSE_LL Hook 监视输入到线程消息队列中的鼠标消息。 12、WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks 使我们可以监视菜单,滚动条,消息框,对话框 消息并且发现用户使用 ALT+TAB or ALT+ESC 组合键切换窗口。 WH_MSGFILTER Hook 只能监视 传递到菜单,滚动条,消息框的消息,以及传递到通过安装了 Hook 子程的应用程序建立的对 话 框 的 消 息 。 WH_SYSMSGFILTER Hook 监 视 所 有 应 用 程 序 消 息 。 WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks 使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过 滤消息。通过调用 CallMsgFilter function 可以直接的调用 WH_MSGFILTER Hook。通过使用 这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里 一样。 13、WH_SHELL Hook 外壳应用程序可以使用 WH_SHELL Hook 去接收重要的通知。当外壳应用程序是激活的并且当 顶层窗口建立或者销毁时,系统调用 WH_SHELL Hook 子程。 WH_SHELL 共有5钟情況: 1. 只要有个 top-level、unowned 窗口被产生、起作用、或是被摧毁; 2. 当 Taskbar 需要重画某个按钮; 3. 当系统需要显示关于 Taskbar 的一个程序的最小化形式; 4. 当目前的键盘布局状态改变; 5. 当使用者按 Ctrl+Esc 去执行 Task Manager(或相同级别的程序) 。 按照惯例,外壳应用程序都不接收 WH_SHELL 消息。所以,在应用程序能够接收 WH_SHELL 消 息之前,应用程序必须调用 SystemParametersInfo function 注册它自己。

基于数据库技术的麻花钻参数化设计

基于数据库技术的麻花钻参数化设计

基于数据库技术的麻花钻参数化设计荆浩旗;白海清;杨柳;代雪峰【摘要】采用UG的二次开发工具集UG/Open实现了麻花钻的参数化设计计算,并结合UG/Open API与GRIP技术建立了麻花钻参数化设计界面,实现麻花钻的自动建模,最后采用API与MFC建立麻花钻参数化数据库,解决了API应用程序不能直接支持MFC的问题。

系统将参数化设计与数据库技术相结合,提高了麻花钻的设计效率与准确性,缩短了设计周期。

%Using second development toolset of UG/Open in UG, the paper achieves the actualization of the parametric design computation of twist drill .Through integration ofUG/Open API and GRIP technology , the study establishes parametric design interface and realizes automatic modeling of twist drills .Finally , a pa-rameterized database of twist drill is established by API and MFC , thus solving the problem of incompatibility of API application and MFC .The designed system combines parameterization and database technology , greatly improving the efficiency and accuracy in twist drill design and shortening the design cycle .【期刊名称】《陕西理工学院学报(自然科学版)》【年(卷),期】2014(000)003【总页数】6页(P18-23)【关键词】UG/Open;麻花钻;MFC;参数化设计;数据库【作者】荆浩旗;白海清;杨柳;代雪峰【作者单位】陕西理工学院机械工程学院,陕西汉中723003;陕西理工学院机械工程学院,陕西汉中723003;陕西理工学院机械工程学院,陕西汉中723003;陕西理工学院机械工程学院,陕西汉中723003【正文语种】中文【中图分类】TG713;TP39在现代机械加工中,孔加工是最重要的加工工种之一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mfc dll回调函数-回复
什么是MFC DLL回调函数?
在应用程序开发中,通过调用动态链接库(DLL)可以实现代码重用和模块化设计。

MFC(Microsoft Foundation Classes)是微软提供的用于开发Windows应用程序的C++类库。

MFC DLL回调函数是指在MFC DLL 中定义的函数,可以在程序之间传递,并在特定事件或条件下被调用。

为什么需要使用MFC DLL回调函数?
使用MFC DLL回调函数可以使程序更加灵活和可扩展。

当一个程序不仅仅只是提供服务,还需要与其他程序进行交互时,通过回调函数可以实现各种功能的扩展。

回调函数使得程序能够在特定的事件发生时通知其他程序,从而实现程序间的数据传递和处理。

如何定义和使用MFC DLL回调函数?
1. 定义回调函数原型:首先,在MFC DLL的头文件中定义回调函数的原型。

回调函数的原型包括函数名、参数类型和返回值类型。

例如,定义一个用于接收消息的回调函数原型为:
cpp
typedef void (*MESSAGE_CALLBACK)(const char* message);
2. 在MFC DLL中实现回调函数:在MFC DLL源代码文件中,实现回调函数的具体逻辑。

回调函数可以根据项目需求进行灵活的设计,让其他程序在特定事件发生时调用相关功能。

例如,实现一个打印消息的回调函数如下:
cpp
void PrintMessage(const char* message)
{
cout << "Received message: " << message << endl;
}
3. 导出回调函数:在MFC DLL的头文件中,使用关键字
`__declspec(dllexport)`将回调函数导出,使其可供其他程序调用。

例如:cpp
__declspec(dllexport) void PrintMessage(const char* message);
4. 在调用程序中导入回调函数:在调用MFC DLL的程序中,需要引入MFC DLL的头文件,并使用关键字`__declspec(dllimport)`声明导入函数。

例如,在调用程序中,导入回调函数的声明如下:
cpp
__declspec(dllimport) void PrintMessage(const char* message);
5. 回调函数的注册和调用:在调用程序中,通过将回调函数注册到MFC DLL中,使得MFC DLL能够在特定事件发生时调用回调函数。

例如,在调用程序中实现回调函数注册和调用的代码如下:
cpp
void RegisterCallback(MESSAGE_CALLBACK callback)
{
注册回调函数到MFC DLL中
...
}
void TriggerEvent()
{
触发特定事件
...
const char* message = "Hello, World!";
callback(message); 调用回调函数
}
int main()
{
...
RegisterCallback(PrintMessage); 注册回调函数
...
TriggerEvent(); 触发特定事件,调用回调函数
...
}
6. 回调函数的具体功能扩展:根据项目需求,通过回调函数可以实现各种各样的功能扩展。

例如,在接收到消息时,可以执行特定的操作,如更新界面、修改数据等。

总结:
MFC DLL回调函数是在MFC DLL中定义的函数,用于实现程序之间的交互和功能扩展。

要使用MFC DLL回调函数,需要定义回调函数的原型、在MFC DLL中实现回调函数、导出回调函数、在调用程序中导入回调函数、注册和调用回调函数。

通过使用MFC DLL回调函数,我们可以使程序更加灵活和可扩展,提高代码的重用性,实现程序间的数据传递和处理。

相关文档
最新文档