MFC制作数码管动态库
MFC动态链接库的创建和调用(类和函数的dll导出和调用)
1.新建MFC DLL工程,取名为:DLL0410
动态链接库的创建和调用(类,函数的DLL导出和调用)
2.在工程中编辑好DLL0410.h,DLL0410.cpp,DLL0410.def三个文件后编译生成对应的dll和lib文件
2.1 DLL0410.h
2.2 DLL0410.cpp
2.3 DLL0410.def
2.4 编辑好上面的3个文件编译后,用dumpbin命令查看是否有函数导出。
(如图所示,sub全局函数和add类的成员函数已经导出)
3.新建一个工程DLL0410test将生成的DLL0410.dll,DLL0410.lib以及DLL0410.h文件拷贝到 DLL0410test工程目录下
4.静态调用:在工程的DLL0410test.cpp文件中导入头文件DLL0410.h,并编写对应的静态调用代码。
同时也要在工程属性链接中加入DLL0410.lib文件。
(如果编译出错有可能是,工程属性中的常规>>字符集>>修改为 使用多字节字符集)
运行成功
5.4.动态调用:只需将生成的DLL0410.dll文件拷贝到新建工程目录下,直接在工程的
DLL0410test.cpp中编写动态调用代码即可。
不用做其他任何连接和导入头文件的操作。
运行成功。
数码管动态显示程序编写步骤
数码管动态显示程序编写步骤一、准备工作在编写数码管动态显示程序之前,我们需要准备以下工作:1. 硬件设备:数码管、开发板等;2. 开发环境:Arduino IDE等;3. 相关库函数:例如“TM1637.h”库。
二、引入库函数在编写数码管动态显示程序之前,我们首先需要在代码中引入相应的库函数。
在Arduino IDE中,可以通过“库管理器”来搜索并安装需要的库函数。
三、初始化设置在开始编写程序之前,我们需要先对数码管进行初始化设置。
这包括设置数码管的引脚连接方式、亮度等参数。
四、定义变量在程序中我们需要定义一些变量来保存要显示的数字、字符等信息。
可以根据需要定义不同类型的变量,例如整型、字符型等。
五、编写显示函数编写一个显示函数来控制数码管的显示效果。
该函数可以接收一个参数,用来指定要显示的内容。
六、主函数在主函数中,我们可以通过调用显示函数来控制数码管的显示效果。
可以根据需要设置循环次数、延时时间等参数,来实现不同的显示效果。
七、编译与上传在编写完程序后,我们需要将代码进行编译,并将程序上传到开发板中进行运行。
在Arduino IDE中,可以点击“编译”按钮进行代码的编译,然后点击“上传”按钮将代码上传到开发板。
八、调试与优化在程序运行过程中,可能会出现一些问题,例如数码管显示异常、数字错误等。
这时候我们需要对程序进行调试,并进行相应的优化。
可以通过添加调试信息、查看变量的值等方式来进行调试。
九、总结通过以上步骤,我们可以编写出一个简单的数码管动态显示程序。
通过调整不同的参数和函数,我们可以实现不同的显示效果。
读者可以根据自己的需求进一步扩展和优化程序,实现更加复杂的功能。
编写数码管动态显示程序并不复杂,只需要按照上述步骤进行操作即可。
希望本篇文章对读者有所帮助,能够让大家更好地理解和掌握数码管动态显示程序的编写方法。
祝大家编程愉快!。
MFC典型应用程序设计
MFC典型应用程序设计
MFC可以用于开发各种类型的Windows应用程序,包括桌面应用程序、图形用户界面(GUI)应用程序和多媒体应用程序等。
在这些应用程序中,MFC的典型应用有以下几个方面。
其次,MFC可以用于处理用户输入。
MFC提供了一套用于处理鼠标、
键盘和其他输入设备的类和函数。
开发人员可以轻松地获取用户的输入,
并根据需要进行相应的处理。
例如,可以通过MFC捕获鼠标点击事件或键
盘按键事件,并执行相应的操作。
此外,MFC还可以用于操作文件和目录。
MFC提供了一系列的文件和
目录类,可以方便地读取、写入和管理文件系统中的文件。
开发人员可以
使用这些类来创建、复制、删除和重命名文件,或者打开文件并读取其中
的数据。
通过MFC还可以获取文件和目录的属性信息,并进行相应的操作。
最后,MFC可以用于实现数据存储和数据库连接。
MFC提供了一套用
于操作数据库的类和函数,可以方便地连接到各种类型的数据库,并执行SQL查询和更新操作。
开发人员可以使用MFC提供的类来连接到数据库服
务器,并执行数据库操作,如插入、更新、删除和查询等。
通过MFC还可
以处理数据库事务,确保数据的一致性和完整性。
综上所述,MFC典型应用程序设计涉及图形用户界面的创建、用户输
入的处理、文件和目录的操作以及数据库的连接和操作等方面。
开发人员
可以通过MFC提供的丰富功能和易于使用的界面,快速开发出各种类型的Windows应用程序,并满足用户的需求。
在MFC列表控件中实现动态操作数据库
本文由baipal贡献pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
48?CoptrEro820mueaN.04在MFC列表控件中实现动态操作数据库曾国洪。
周汝威(州市水利科学研究所,广东广州502)广120摘要:本文以ADO数据库编程技术为例,绍了在VC与.T集成开发的环境中,用由MF介HNE使C的Citr类创LslCt建的列表控件作为子窗口,在子窗口中实现动态切换操作数据库记录集的方法。
关键词:MFC;列表控件;动态操作;数据库1列表控件类CiCrLttsl列表控件类CiCr是MFLsttlC类库中基本窗口类CdWn的子类,了本身特有的列表控件特性外,继承了来自父类除还Cd的基本特性。
在对话框编程时可以直接从工具箱中的Wn“iotl拖至对话框界面资源中,可可视化地直接定LsCnr”to并制其属性,也可在父窗口类中编写代码创建之,可增加一些还代码以根据父窗口的状态确定其在父窗口中的位置和大小。
m_ruetm一1:CRcetetrc;rc.eRcEIy;ettetmp0Stif(m—tiCret(SCL—OREclst.aeW_HIILt1CrDWSBDRIWSVCOLLSREOTrc,h,SRLIVPR,ettisIDCKELILTTLICRS_—)=一)/创建控件=1/run一:etr1cliCrStxeddtl(clsBxtxtl)tst,eEtneSym—tio,ESy(LtleLtGee2使用V+C+快速开发数据库应用程序的问题使用V+编程的好处是自由度很大,c+能编写各种各样的程序,有一个不好的方面是编写的代码量较大,开发一般但在IsEULOWSLCISEILNE)L_XFLRVEETL—XGRDIS;V/设置控件扩展风格/m—clsCrSoWio(W—HW)/显示控件tit.hwnwSSO;/Lt1drur0etn:的数据库应用程序时,不如其他快速开发工具效率高,V如B、PB等。
MFC 教程 第13章动态链接库_
13.2 动态链接库的创建
设计DLL的主要工作是编写库中的函数,方法 与编写一般函数的方法基本相同。但要对库中的 函数进行必要的声明,说明哪些函数是可以导出的, 哪些不可以. 声明DLL导出函数有两种方法: 在.def文件中声明;
使用关键字_declspec(C常规型DLL
常规型DLL可用于MFC应用程序和非MFC应用程序。用 MFC AppWizard创建MFC DLL框架时,在New对话框中 的Projects选项卡中选择MFC AppWizard(dll)选项,在 出现的对话框中选择创建常规型DLL即可。 MFC把DLL的入口函数DLLMain封装在CWinApp中。 导出项目要使用关键字_declspec(dllexport)来说明。
14
13.2 动态链接库的创建
例如
; DLL名字为Sample LIBRARY Sample ; 函数ShowMe为导出函数 EXPORTS ShowMe ;def文件结束
15
13.2 动态链接库的创建
在创建DLL时,编译链接器先使用def文件创建两个文件: 一个导出文件(.EXP)和一个导入库文件(.LIB),然后 使用导出文件再创建DLL文件。 导入库文件中存放了外部应用程序可导入的DLL导出函数 名称的列表,函数的代码则存放在DLL文件中。 外部应用程序使用的文件是导入库文件和DLL文件。
17
;DLL的名称 LIBRARY MFCexp13_1dll ; 声明ShowHello为导出函数 EXPORTS ShowHello ;def文件结束
18
新建一个源文件MFCexp13_1dll.cpp,并在文件中添加如下代码:
#include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }
c语言mfc课程设计
c语言mfc课程设计一、课程目标知识目标:1. 理解MFC(Microsoft Foundation Class)的基本概念,掌握其在C语言编程中的应用。
2. 学会使用MFC库进行Windows应用程序开发,掌握常用的MFC类及其功能。
3. 掌握MFC事件处理机制,能够编写具有交互功能的MFC程序。
技能目标:1. 能够独立设计并编写简单的MFC应用程序,包括界面设计和程序逻辑实现。
2. 学会使用MFC控件,如按钮、文本框等,并能将其应用到实际项目中。
3. 能够运用所学知识解决实际编程问题,具备一定的调试和优化能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其学习C语言和MFC的热情。
2. 培养学生的团队协作意识,使其在项目开发过程中学会与他人合作、交流。
3. 引导学生树立正确的价值观,认识到编程对于解决现实问题的重要性。
本课程针对高年级学生,在学生已掌握C语言基础知识的前提下,进一步学习MFC编程。
课程性质为实践性较强的学科,注重培养学生的动手能力和实际应用能力。
根据学生特点和教学要求,课程目标具体、可衡量,旨在使学生能够将所学知识应用于实际项目中,提高其编程水平。
在教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. MFC概述:介绍MFC的基本概念、发展历程及其在Windows编程中的应用。
- 教材章节:第1章 MFC简介2. MFC编程环境搭建:讲解如何配置MFC开发环境,包括Visual Studio的安装与配置。
- 教材章节:第2章 MFC编程环境3. MFC类库及其使用:学习常用的MFC类,如CWnd、CFrameWnd、CDialog等,了解其功能及应用。
- 教材章节:第3章-第5章 MFC类库及其使用4. MFC事件处理:学习MFC事件处理机制,掌握消息映射、事件处理函数编写等。
- 教材章节:第6章 MFC事件处理5. MFC控件应用:学习常用控件的使用,如按钮、文本框、列表框等,并能将其应用到实际项目中。
mfc实现流程
mfc实现流程
MFC(Microsoft Foundation Class Library)是微软提供的一个类库,用于在Windows环境下开发基于C++的图形用户界面(GUI)应用程序。
使用MFC可以简化Windows应用程序的开发过程。
以下是使用MFC实现应用程序的基本流程:
1. 创建项目:在Visual Studio中创建一个新的MFC项目。
选择“File”菜单中的“New”->“Project”,然后选择“MFC Application”。
2. 设置项目属性:在项目创建后,需要设置一些属性,如应用程序类型(单文档或多文档)、使用的MFC版本等。
3. 设计界面:使用Visual Studio的设计器,在图形界面中添加需要的控件,如按钮、文本框等。
也可以手动编写代码来创建控件。
4. 编写代码:根据需要编写代码,包括处理用户输入、更新界面、访问数据库等。
MFC提供了许多类和函数,用于简化常见的编程任务。
5. 编译和运行:编译代码并运行应用程序,检查是否存在错误。
6. 调试:如果应用程序中存在错误,使用调试器来查找和修复问题。
7. 测试:进行彻底的测试,确保应用程序在不同情况下都能正常工作。
8. 部署:完成测试后,可以将应用程序部署到目标机器上。
以上是使用MFC实现应用程序的基本流程。
具体实现细节会根据具体需求和项目规模有所不同。
MFC创建动态链接库DLL并调用方法详解
MFC创建动态链接库DLL并调⽤⽅法详解实例⼀:1、创建⼀个动态链接库⼯程,如login_dll。
2、在原⼯程头⽂件或者新建头⽂件如showdlg.h定义动态链接库的导出函数,代码如下:#include "stdafx.h"#define EXPORT __declspec(dllexport)extern "C" EXPORT void __stdcall Showdialg(char* pText);3、在动态链接库源⽂件中定义showdialog函数,代码如下:void _stdcall Showdialg(char* pText){MessageBox(NULL,pText,"提⽰⼀",0);}注:此步编译后,即可⽣成dll与lib⽂件,因为_stdcall是⼀种⽐较流⾏的函数调⽤约定,(或者可以不⽤_stdcall),如果使⽤的时候,为了防⽌发⽣函数命令改编的情况,可以定义⼀个.def⽂件,其中加⼊EXPORTS节,设置导出函数名,如下所⽰:LIBRARY "login_dll"EXPORTSShowdialg = Showdialg4、创建⼀个基于对话框的⼯程。
5、定义⼀个函数指针类型,其定义与动态链接库的函数原型相同,代码如下:typedef void (__stdcall * funShowInfo)(char* pchData);6、处理按键单击事件,加载动态链接库,代码如下:void Cuse_login_dllDlg::OnBnClickedOk(){HMODULE hMod = LoadLibrary("login_dll.dll");if (hMod != NULL){funShowInfo ShowInfo;ShowInfo = (funShowInfo)GetProcAddress(hMod,"Showdialg");if (ShowInfo)ShowInfo("传⼊参数成功且调⽤正常");}FreeLibrary(hMod);}其中,第5步与第6步是通过LoadLibrary函数动态加载链接库的⽅法,下⾯介绍⼀下静态加载链接库的⽅法:1、加载链接库的头⽂件,将动态链接库头⽂件拷贝到当前⼯程中,并在当前⼯程头⽂件进⾏声明。
第12章-MFC动态链接库
12.2.1
•
一个简单的DLL
1.DLL的编程实现
图12.1 工程向导
• •
2.DLL调用的编程实现 3.例程分析
图12.2 对话框窗口设计
图12.3 程序运行结果
12.2.2
•
导出函数
DLL文件中包含一个导出函数表,给出 了DLL中每个导出函数的名字和标识号。 • 另外,函数表中还包含了DLL中函数的 地址。 • 动态链接过程将在加载DLL模块时,动 态建立一个函数调用与函数地址的对应表。
•
本章在介绍DLL基本原理的基础上,着 重讲解了DLL的编程思想,重点介绍了常 规DLL和扩展DLL的基本概念及其创建、调 用过程,并给出了相关的开发、调用实例。
上机指导
• • • • • 实验一:创建一个简单的DLL 实验内容 创建一个简单的DLL,对输入的数值进 行乘法运算。 实验目的 熟悉创建DLL的过程与步骤。
12.2.3
•
导入函数
DLL中实现了导出函数,而在应用程序 中,必须声明相应的导入函数。 • 不论DLL中采用的是DEF文件输出方式, 还是_declspec(dllexport)输出方式,在应 用程序中都可以用_declspec(dllimport)关 键字来导入函数。
•
•
采用_declspec(dllimport)关键字导入 函数MyFunction(),实现如下:
12.3.1
•
隐式链接
要实现对DLL的隐式链接,应用程序要 从DLL提供者处获得以下3个文件: • (1)包含有关DLL输出函数声明的头文 件; • (2)DLL的导入库(.LIB)文件; • (3)动态链接库(.DLL)文件。
12.3.2
•
mfc教程
mfc教程
MFC(Microsoft Foundation Classes)是微软公司开发的一套
用于开发Windows应用程序的C++框架。
MFC提供了一系列
的类和函数,简化了Windows应用程序的开发过程,使程序
员能够更加专注于业务逻辑的实现。
MFC教程是帮助初学者理解和学习MFC框架的材料。
它可以
包括对MFC的基本概念和架构的介绍,以及如何创建和设计MFC应用程序的详细指导。
在MFC教程中,首先会对MFC框架进行简单的介绍,解释MFC的基本概念,如应用程序对象、主窗口类等。
然后会详
细介绍如何创建一个MFC应用程序,包括创建工程、设计界
面等步骤。
在创建应用程序的过程中,会介绍如何添加控件、设计菜单,并为控件和菜单添加相应的功能。
接下来,教程会介绍如何处理MFC应用程序中的事件和消息。
MFC应用程序是事件驱动的,当用户进行操作时,会触发相
应的事件,程序需要对这些事件进行处理。
教程会详细介绍如何注册和处理事件,以及如何发送和接收消息。
此外,教程还会介绍MFC的一些常用功能和技巧,如文件操作、数据库连接、绘图操作等。
这些内容可以帮助程序员更好地利用MFC框架完成复杂的任务。
最后,教程会提供一些实例代码和练习题,供学习者进行练习和巩固所学的知识。
总之,MFC教程是帮助初学者理解和学习MFC框架的教材。
通过教程的学习,初学者可以掌握MFC框架的基本概念和使用方法,能够独立地开发Windows应用程序。
VS2012创建MFC动态库以及动态库调试详细步骤
将刚才的DLL项目生成解决方案;
打开Debug文件夹,找到DLL文件以及lib文件,将它拷贝到对话框项目的Debug中;
这里的对话框项目名为dDllTest;
在Dll工程中找到要用的那个头文件
也拷贝到对话框工程中;
在对话框项目中找到stdafx.h文件,在里面包含头文件,链接LIB
编译完成;
VS2012创建MFC动态库以及动态库调试详细步骤
技术交流:2210518824(qq)
1.新建一个DLL工程
打开VS2012,点击新建项目出现新建项目对话框,如下图所示;
选择MFCMFCDLL;键入项目名称以及解决方案名称,可以不一样,选择存放位置,点击确定;进入MFC DLL向导,点击下一步;
选择使用共享MFC DLL的规则DLL点击完成;
这时候就生成了一个空的MFC DLL工程;
2.添加用户程序
点击解决方案资源管理器;
右击头文件,添加--->新建项
进入添加新项界面,选择头文件,输入头文件名,点击添加
同样的方法在添加一个源文件;
.CPP文件:
.H文件
一个简单的实现加法的MFC DLL完成;
3.调用和调试DLL
创建一个基于对话框的MFC项目用于测试DLL;
选择MFCLibrary1右击打开属性界面;在配置属性->常规中将输出目录和中间目录改成如下图所示;
在连接器—>常规中将输出文件修改,如下图所示
右击对话框工程,点击项目依赖项
选择DLL
在对话框项目中找到stdafx.h文件,在里面包含头文件,链接LIB
完成,编译,直接调用,调用方法和方法一一样,可以直接进入函数调试
两种方法的优缺点
mfc动态库调用方法
mfc动态库调用方法MFC动态库调用方法主要包括以下几个步骤:1. 创建动态库项目:在Visual Studio中选择创建MFC DLL项目,命名并设置项目属性。
2. 编写动态库代码:在动态库项目中编写需要被调用的函数或类。
3. 导出函数或类:动态库中需要被调用的函数或类需要使用`__declspec(dllexport)`修饰符进行导出。
例如:```// 导出函数声明__declspec(dllexport) int MyFunction();// 导出类声明class __declspec(dllexport) MyClass {// ...};```4. 生成动态库:编译并生成动态库文件(例如.dll文件)。
5. 创建调用动态库的应用程序项目:在Visual Studio中创建一个应用程序项目。
6. 引用动态库:在应用程序项目中,右键选择项目属性,打开配置属性对话框,选择“常规”选项卡,在“附加包含目录”中添加动态库的头文件路径,在“库目录”中添加动态库的.lib文件路径。
7. 调用动态库中的函数或类:在应用程序项目中,使用`__declspec(dllimport)`修饰符声明动态库中的函数或类,然后就可以调用了。
例如:```// 导入函数声明__declspec(dllimport) int MyFunction();// 导入类声明class __declspec(dllimport) MyClass {// ...};// 调用函数或类int result = MyFunction();MyClass obj;```以上就是MFC动态库的调用方法。
在实际使用中,还需要注意动态库的导出方式,如C风格函数的导出、C++风格函数的导出以及类的导出等;同时还需注意编译器的位数匹配问题,例如32位编译器需要调用32位的动态库。
MFC控件使用说明
MFC控件使用说明MFC(Microsoft Foundation Classes)是一套C++的类库,用于开发Windows应用程序。
MFC提供了丰富的控件(control)来实现图形界面(GUI)。
下面是MFC控件的使用说明。
1.控件概述:2.控件的创建:在MFC应用程序的对话框资源中可以选择并拖拽控件到界面上。
MFC 提供了DIALOG控件类表示对话框,并通过类向导(Class Wizard)自动生成控件的成员变量。
3.控件的属性和事件:每个控件都有一些属性,如字体、颜色、大小等,可以通过修改这些属性来改变控件的外观。
每个控件也都有一些事件,如鼠标点击、按键按下等,可以通过响应这些事件来处理用户的操作。
4.控件的操作:MFC提供了一系列的成员函数来操作控件,如设置文本、获取选择的项、显示隐藏控件等。
可以通过控件的成员变量来调用这些函数。
5.控件的布局和对齐:在对话框资源中可以使用布局与对齐工具来自动排列和对齐控件。
也可以通过代码来动态调整控件的位置和大小。
6.控件的自定义:如果MFC提供的控件不能满足需求,可以继承自原有控件类,并重写其成员函数来实现自定义的控件。
7.控件的扩展库:除了MFC提供的控件,还可以使用第三方控件库来增加更多的控件。
常见的控件库有DevExpress、Telerik等,提供了更丰富的控件和功能。
8.控件的样式和外观:9.控件的国际化和本地化:MFC提供了多语言支持,可以使用资源文件来实现对不同语言的支持。
通过在资源文件中提供不同语言的字符串,可以使控件显示适合不同语言环境的文本。
10.控件的错误处理:在使用MFC控件时,可能会出现一些错误,如控件无法创建、控件响应事件失败等。
可以通过正确处理这些错误,如捕获异常、输出错误信息等来保证程序的稳定性和可靠性。
总结:MFC控件提供了丰富的功能和灵活的扩展方式,可以满足大部分GUI应用程序的需求。
通过掌握MFC控件的使用,可以快速开发出功能强大、界面友好的Windows应用程序。
mfc数据库编程实例
MFC(Microsoft Foundation Classes)是微软提供的一组用于创建基于Windows的应用程序的类库。
它主要用于简化Windows应用程序的开发过程。
以下是一个使用MFC进行数据库编程的简单示例。
这个示例使用的是,这是一种用于访问和操作数据库的技术。
在这个示例中,我们将创建一个简单的应用程序,该应用程序将连接到一个SQL Server数据库,然后显示一张表的所有行。
首先,你需要创建一个MFC应用程序。
然后,在生成的代码中,找到你的应用程序的“InitInstance”方法,在这个方法中添加以下代码:```csharp// 添加对System.Data.dll 的引用using System.Data;// 创建SqlConnection 对象SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=YourDatabaseName;Integrated Security=True");// 打开数据库连接connection.Open();// 创建SqlCommand 对象SqlCommand command = new SqlCommand("SELECT * FROM YourTableName", connection);// 创建SqlDataReader 对象SqlDataReader reader = command.ExecuteReader();// 循环读取所有行并输出到控制台while (reader.Read()){for (int i = 0; i < reader.FieldCount; i++){Console.Write(reader[i].ToString() + "\t");}Console.WriteLine();}// 关闭数据库连接reader.Close();connection.Close();```你需要将"YourDatabaseName" 和"YourTableName" 替换为你的数据库名称和表名称。
MFC中如何动态创建控件并响应其消息
MFC中如何动态创建控件并响应其消息原理:利用窗体上的消息都会经OnCmdMsg进行路由处理的原理,在这里截获自己动态生成的那些控件,然后通过自定义消息发送出去(带上控件id),经自己的消息处理函数处理即可。
1、定义起始控件ID号,和自定义消息UINT Start_CtlID = 1980;#define DynamicBtnMessage WM_USER+200后面动态创建的控件id号会基于Start_CtlID自增;2、在OnInitDialog中动态创建控件窗体类中定义:CArray btnArray 以保存动态创建的按钮int btnw=120;int btnh = 50;//创建*3个button,顺序排列for (int i=0;i<5;i++){for (int j=0;j<5;j++){CString str;str.Format(_T("Cam%d"),Start_CtlID-1980);r.left =100 + (j*btnw);r.top =250 + (i*btnh);r.bottom = r.top + btnh;r.right =r.left + btnw;CButton *btn = CreateButton(Start_CtlID,str,r, BS_FLAT);btn->ShowWindow(SW_SHOW);btnArray.Add(btn);}}3 在OnCmdMsg中处理控件点击消息BOOL CFormDlg::OnCmdMsg(UINT nID, int nCode, void*pExtra,AFX_CMDHANDLERINFO* pHandlerInfo){// 判断传进来的控件id位于动态创建button的id之间,并且命令nCode是控件命令(比如点击事件消息),注:其它系统事件也会走到这个函数里进行分发的。
用MFC动态编程实现8数码问题求解
[d_class] = ' {0} '" , [d_freq] = ' {0} '" ,
ddbuv,strId) ;
} 在导入预测数据和实测数据后,在 MapXtreme 对比分析 模块的图层控制中可以选择打开相应的图层,对发射台的覆 盖情况进行综合对比分析,如图 4 所示。
200191. 20 43
NETWORK AND COMMUNICATION
网络与通信
else strDate = " 1=1" ;
if (checkBoxClass.Checked) strClass = string.Format ("
comboClass.Text) ; else strClass = " 1=1" ; if (checkBoxFreq.Checked) strFreq = string.Format ("
图 1 初始状态
图 2 终止状态
2 判断一个 8 数码问题是否可解
对于有些情况的 8 数码问题是无法找到具体的求解过程 的,所以在进行搜索前要对初始状态和目标状态进行比较, 以便得到一种解法,可以分别求解初始状态的和目标状态的 逆序数进行比较,如果相等说明有解法,否则,没有。求解 逆序数的算法如下:计算排列的逆序数值,以 2 3 1 5 8 4 6 7 5 为例子,5 表示的是空格,不计算,那么求 23158467 的逆 序值为:
CAIGameView 类中实现的,其主要方法:需要在点击按钮 CAIGameView 获 得 form 视 图 上 的 数 据 , 那 么 就 要 重 载 OnUpdate 函数:
在MFC中创建动态控件的生成与响应cc++mfc动态按钮
CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle) { CString m_Caption; m_Caption.LoadString( nID ); // CButton *p_Button = new CButton(); ASSERT_VALID(p_Button); p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID ); // return p_Button; }
ClassWizard 1. MESSAGE_MAP MESSAGE_MAP
(ID, ) ClassWizard
AFX_MSG_MAP
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView) //{{AFX_MSG_MAP(CTextEditorView) ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0) //}}AFX_MSG_MAP END_MESSAGE_MAP()
BS_BITMAP
BS_DEFPUSHBUTTON
rect
pParentWnd
NULL
nID ID ID Create()
p_MyBut->Create( " ", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );
5.
CTextEditorView::~CTextEditorView() { int i; for( i=0; i<3; i++) {
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC制作数码管动态库1.新建一个DLL工程打开VS2012,点击新建项目出现新建项目对话框,如下图所示;选择MFC MFCDLL;键入项目名称以及解决方案名称,可以不一样,选择存放位置,点击确定;进入MFC DLL向导,点击下一步;选择使用共享MFC DLL的规则DLL点击完成;这时候就生成了一个空的MFC DLL工程;2.添加用户程序点击解决方案资源管理器;右击头文件,添加--->新建项进入添加新项界面,选择头文件,输入头文件名,点击添加同样的方法在添加一个源文件;代码:CPP文件void OnDraw1(CDC *pDC,COLORREFcolor,intx,inty,floatch,intindx){CPen Pen(PS_SOLID, 1, color);//数码管外框画笔CPen *OldPen=pDC->SelectObject(&Pen);CRgnRgn;CPoint Point[7],Point1[7],Point2[7],Point3[7],Point4[7],Point5[7],Point6[7];Point[0]=CPoint(x,y);Point[1]=CPoint(x+(ch*16),y);Point[2]=CPoint(x+(ch*17),y+ch);Point[3]=CPoint(x+(ch*14),y+(ch*4));Point[4]=CPoint(x+(2*ch),y+(ch*4));Point[5]=CPoint(x-ch,y+ch);Point[6]=CPoint(x,y);Point1[0]=CPoint(x-2*ch,y+2*ch);Point1[1]=CPoint(x+ch,y+5*ch);Point1[2]=CPoint(x+ch,y+17*ch);Point1[3]=CPoint(x-2*ch,y+20*ch);Point1[4]=CPoint(x-3*ch,y+19*ch);Point1[5]=CPoint(x-3*ch,y+3*ch);Point1[6]=CPoint(x-2*ch,y+2*ch);Point2[0]=CPoint(x-2*ch+(ch*20),y+2*ch);Point2[1]=CPoint(x+ch+(ch*14),y+5*ch);Point2[2]=CPoint(x+ch+(ch*14),y+17*ch);Point2[3]=CPoint(x-2*ch+(ch*20),y+20*ch);Point2[4]=CPoint(x-3*ch+(ch*22),y+19*ch);Point2[5]=CPoint(x-3*ch+(ch*22),y+3*ch);Point2[6]=CPoint(x-2*ch+(ch*20),y+2*ch);Point3[0]=CPoint(x-2*ch,y+2*ch+19*ch);Point3[1]=CPoint(x+ch,y+5*ch+19*ch);Point3[2]=CPoint(x+ch,y+17*ch+19*ch);Point3[3]=CPoint(x-2*ch,y+20*ch+19*ch);Point3[4]=CPoint(x-3*ch,y+19*ch+19*ch);Point3[5]=CPoint(x-3*ch,y+3*ch+19*ch);Point3[6]=CPoint(x-2*ch,y+2*ch+19*ch);Point4[0]=CPoint(x-2*ch+(ch*20),y+2*ch+19*ch);Point4[1]=CPoint(x+ch+(ch*14),y+5*ch+19*ch);Point4[2]=CPoint(x+ch+(ch*14),y+17*ch+19*ch);Point4[3]=CPoint(x-2*ch+(ch*20),y+20*ch+19*ch);Point4[4]=CPoint(x-3*ch+(ch*22),y+19*ch+19*ch);Point4[5]=CPoint(x-3*ch+(ch*22),y+3*ch+19*ch);Point4[6]=CPoint(x-2*ch+(ch*20),y+2*ch+19*ch);Point5[0]=CPoint(x,y+41*ch);Point5[1]=CPoint(x+(ch*16),y+41*ch);Point5[2]=CPoint(x+(ch*17),y+ch+39*ch);Point5[3]=CPoint(x+(ch*14),y+(ch*4)+33*ch); Point5[4]=CPoint(x+(2*ch),y+(ch*4)+33*ch); Point5[5]=CPoint(x-ch,y+ch+39*ch);Point5[6]=CPoint(x,y+41*ch);Point6[0]=CPoint(x+2*ch,y+18*ch);Point6[1]=CPoint(x+(ch*14),y+18*ch);Point6[2]=CPoint(x+(ch*16.5),y+2.5*ch+18*ch); Point6[3]=CPoint(x+(ch*14),y+(ch*5)+18*ch); Point6[4]=CPoint(x+2*ch,y+(ch*5)+18*ch); Point6[5]=CPoint(x-0.5*ch,y+2.5*ch+18*ch); Point6[6]=CPoint(x+2*ch,y+18*ch);CBrushBkBrsh(color);CBrush *OldBrush=pDC->SelectObject(&BkBrsh);switch(indx){case 0:pDC->Polygon(Point,7);pDC->Polygon(Point1,7);pDC->Polygon(Point2,7);pDC->Polygon(Point3,7);pDC->Polygon(Point4,7);pDC->Polygon(Point5,7);break;case 1:pDC->Polygon(Point2,7);pDC->Polygon(Point4,7);break;case 2:pDC->Polygon(Point,7);pDC->Polygon(Point2,7);pDC->Polygon(Point3,7);pDC->Polygon(Point5,7);pDC->Polygon(Point6,7);break;case 3:pDC->Polygon(Point,7);pDC->Polygon(Point4,7);pDC->Polygon(Point5,7);pDC->Polygon(Point6,7); break;case 4:pDC->Polygon(Point1,7);pDC->Polygon(Point2,7);pDC->Polygon(Point4,7);pDC->Polygon(Point6,7);break;case 5:pDC->Polygon(Point,7);pDC->Polygon(Point4,7);pDC->Polygon(Point5,7);pDC->Polygon(Point1,7);pDC->Polygon(Point6,7);break;case 6:pDC->Polygon(Point,7);pDC->Polygon(Point1,7);pDC->Polygon(Point3,7);pDC->Polygon(Point4,7);pDC->Polygon(Point5,7);pDC->Polygon(Point6,7); break;case 7:pDC->Polygon(Point,7);pDC->Polygon(Point2,7);pDC->Polygon(Point4,7); break;case 8:pDC->Polygon(Point,7);pDC->Polygon(Point1,7);pDC->Polygon(Point2,7);pDC->Polygon(Point3,7);pDC->Polygon(Point4,7);pDC->Polygon(Point5,7);pDC->Polygon(Point6,7); break;case 9:pDC->Polygon(Point,7);pDC->Polygon(Point1,7);pDC->Polygon(Point2,7);pDC->Polygon(Point5,7);pDC->Polygon(Point6,7);break;case 10:pDC->Polygon(Point6,7);break;case 11:break;default:break;}Pen.DeleteObject();BkBrsh.DeleteObject();}voidDiplay(CDC *pDC,int x1,int y1,float size,int axis) {// dco=valuecx;// dco=XXS;switch(axis){case AXIS_X:dco=XXS;break;case AXIS_Y:dco=YYS;break;case AXIS_Z:dco=ZZS;break;case AXIS_C:dco=CCS;break;default:break;}intqian=int(fabs(dco))/1000;intbai=int(fabs(dco-qian*1000))/100;intshi=int(fabs(dco-qian*1000))%100/10;intge=int(fabs(dco-qian*1000))%100%10;floatfg=fabs(dco)-(int)fabs(dco);intyi=int(fg*10);inter=int(fg*100)%10;int san=int(fg*1000)%100%10;int ch1=30*size;int ch2=5*size;Rectangle1(pDC,x1-ch2-(ch1/5),y1-(ch2/2)-(ch1/6),x1+7*ch1+ch2,y1+1.6*ch1,CLR_SEGBK,int(size ));//数码管阴影/***************************************************************************/ OnDraw1(pDC,CLR_YYRED,x1,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+1*ch1,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+2*ch1,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+3*ch1,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+4*ch1+ch2,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+5*ch1+ch2,y1,size,8);OnDraw1(pDC,CLR_YYRED,x1+6*ch1+ch2,y1,size,8);//整数部分/***************************************************************************/ OnDraw1(pDC,CLR_LIGHTRED,x1,y1,size,qian);OnDraw1(pDC,CLR_LIGHTRED,x1+1*ch1,y1,size,bai);OnDraw1(pDC,CLR_LIGHTRED,x1+2*ch1,y1,size,shi);OnDraw1(pDC,CLR_LIGHTRED,x1+3*ch1,y1,size,ge);//小数部分/***************************************************************************/ OnDraw1(pDC,CLR_LIGHTRED,x1+4*ch1+ch2,y1,size,yi);OnDraw1(pDC,CLR_LIGHTRED,x1+5*ch1+ch2,y1,size,er);OnDraw1(pDC,CLR_LIGHTRED,x1+6*ch1+ch2,y1,size,san);Ellipse1(pDC,x1+3.8*ch1,y1+1.2*ch1,size*4,CLR_LIGHTRED);rectinit=CRect(x1-ch2-(ch1/5),y1-(ch2/2)-(ch1/6),x1+7*ch1+ch2,y1+1.6*ch1);}void Ellipse1(CDC *pDC,intx,inty,intrec,COLORREF color){CBrush brush,*Oldbrush;//颜色填充画刷CPen Pen(PS_SOLID, 1, color);//小数点外框画笔CPen *OldPen=pDC->SelectObject(&Pen);floatdd=1.6;brush.CreateSolidBrush(color);Oldbrush=pDC->SelectObject(&brush);pDC->Ellipse(x,y,x+rec*dd,y+rec*dd);pDC->SelectObject(Oldbrush);Pen.DeleteObject();}void Rectangle1(CDC *pDC,intx,inty,int x1,int y1,COLORREF color,int size){CBrush brush,*Oldbrush;//颜色填充画刷CPen Pen(PS_SOLID, size*2, CLR_BROD);//外框画笔CPen *OldPen=pDC->SelectObject(&Pen);brush.CreateSolidBrush(color);Oldbrush=pDC->SelectObject(&brush);pDC->Rectangle(x,y,x1,y1);pDC->SelectObject(Oldbrush);Pen.DeleteObject();}.H文件3.调用方式:在对话框程序OnPaint中调用,应为需要刷新显示,用到了双缓冲;CPaintDCdc(this);CRectrectClient;CDC dcMen,dcBkgnd;CBitmapbitmapTemp,*pOldBitmap;GetClientRect(&rectClient);//获取窗口句柄bitmapTemp.CreateCompatibleBitmap(&dc,rectClient.Width(),rectClient.Height());//创建内存位图dcMen.CreateCompatibleDC(&dc);//创建内存位图(依附窗口兼容的DC)pOldBitmap = dcMen.SelectObject(&bitmapTemp);//将内存位图选入内存DCdcMen.FillSolidRect(rectClient,RGB(236,233,216));//主要的作图操作int de=50,x327=550,y327=800;float size=1.6;Diplay(&dcMen,x327,y327+de*3,size,1);Diplay(&dcMen,x327+de*8,y327+de*3,size,2);dc.BitBlt(0,0,rectClient.Width(),rectClient.Height(),&dcMen,0,0,SRCCOPY);dcMen.SelectObject(pOldBitmap);//内存复位在Ontimer中刷新数码管显示;。