C++编程常用模块
C语言中的模块化编程技巧

C语言中的模块化编程技巧在C语言中,模块化编程是一种重要的技巧,能够帮助程序员更好地组织和管理代码,提高代码的可维护性和可扩展性。
下面将介绍一些C语言中的模块化编程技巧,帮助你写出更加优秀的代码。
首先,模块化编程的核心思想是将代码划分为不同的模块或文件,每个模块负责完成特定的功能,从而降低代码的复杂度。
在C语言中,通常使用头文件(.h文件)和源文件(.c文件)来实现模块化编程。
一个常见的模块化编程技巧是使用头文件来声明函数原型和全局变量,在源文件中实现函数功能。
这样可以将函数的接口和实现分离,提高代码的可读性和可维护性。
另外,通过头文件的方式还可以方便地重用代码,减少代码冗余。
另外,C语言中还可以使用静态函数和静态变量来实现模块化编程。
将函数和变量声明为静态的,可以限制其作用域在当前文件内,避免与其他模块的同名函数或变量发生冲突。
这样可以提高代码的可靠性和安全性。
此外,C语言中还可以使用头文件保护宏(#ifndef)来避免头文件重复包含。
头文件保护宏可以确保每个头文件只被包含一次,避免因重复包含导致的编译错误。
这种技巧在大型项目中特别有用,可以有效地管理头文件的依赖关系。
另外,C语言中还可以使用动态链接库(DLL)来实现模块化编程。
将相关的功能封装在一个动态链接库中,可以方便地在不同的程序中重用代码。
动态链接库的使用可以将项目分解为多个独立的模块,减少不同模块之间的耦合度,提高代码的灵活性和扩展性。
总之,模块化编程是C语言中非常重要的技巧,能够帮助程序员更好地管理和组织代码,提高代码的可维护性和可扩展性。
通过合理地划分模块、使用头文件和源文件、采用静态函数和变量、使用头文件保护宏以及动态链接库等技巧,可以写出更加清晰、灵活和可靠的代码。
希望以上介绍的技巧能够帮助你更好地应用模块化编程,在C语言项目中取得更好的效果。
c2f模块详细结构

C2F(Client to Front)是一种常见的模块化编程模式,用于将应用程序分解为多个模块,每个模块负责一个特定的功能。
这种模式有助于提高代码的可维护性、可重用性和可扩展性。
下面将详细介绍C2F模块的结构。
1. 模块定义C2F模块通常由以下部分组成:* 模块名称:模块的唯一标识符,用于引用该模块。
* 模块路径:模块在应用程序中的路径,通常使用相对路径或绝对路径表示。
* 模块依赖:其他模块或库,该模块需要依赖它们才能正常工作。
* 模块功能:该模块提供的功能或服务,包括函数、类、变量等。
在Python中,可以使用`__name__`变量和`import`语句来定义模块。
例如,以下代码定义了一个名为`my_module`的模块:```pythondef my_function():print("Hello, world!")```2. 模块导入在应用程序中,可以使用`import`语句导入模块。
例如,以下代码导入了名为`my_module`的模块:```pythonimport my_module```3. 模块使用导入模块后,可以使用模块中的函数、类、变量等。
例如,以下代码调用了`my_module`模块中的`my_function`函数:```pythonmy_module.my_function()```4. 模块依赖管理C2F模块通常使用Python的包管理器(如pip)来管理依赖项。
在安装包时,可以使用`pip install`命令来安装所需的依赖项。
例如,以下命令安装了名为`requests`的依赖项:```shellpip install requests```5. 模块打包和发布为了方便其他人使用你的C2F模块,你可以将其打包为Python包并将其发布到Python Package Index(PyPI)等第三方库托管平台。
你可以使用setuptools或setup.py来创建和管理包。
c标准程序库

c标准程序库C标准程序库。
C标准程序库是C语言程序设计中非常重要的一部分,它包含了大量的函数和宏定义,能够为程序员提供丰富的功能和工具。
在C标准程序库中,包含了各种各样的函数,如数学函数、字符串处理函数、文件操作函数等,这些函数能够帮助程序员快速、高效地完成各种任务。
本文将介绍C标准程序库的一些常用函数和使用方法,希望能够帮助读者更好地理解和应用C标准程序库。
一、数学函数。
C标准程序库中包含了丰富的数学函数,如sin、cos、tan等三角函数,exp、log、pow等指数和对数函数,以及fabs、sqrt、ceil等常用的数学函数。
这些函数能够帮助程序员进行各种复杂的数学计算,如求平方根、对数运算、三角函数计算等。
使用这些函数可以大大简化程序设计的复杂度,提高程序的可读性和可维护性。
二、字符串处理函数。
C标准程序库中也包含了丰富的字符串处理函数,如strlen、strcpy、strcat等。
这些函数能够帮助程序员对字符串进行各种操作,如计算字符串长度、复制字符串、连接字符串等。
字符串处理函数在实际的程序设计中应用广泛,能够帮助程序员处理各种文本数据,如文件读写、网络通信、用户输入等。
三、文件操作函数。
C标准程序库中的文件操作函数也是非常重要的一部分,如fopen、fclose、fread、fwrite等。
这些函数能够帮助程序员对文件进行各种操作,如打开文件、关闭文件、读取文件、写入文件等。
文件操作函数在实际的程序设计中应用广泛,能够帮助程序员进行文件的读写、管理和操作。
四、其他常用函数。
除了上述介绍的数学函数、字符串处理函数和文件操作函数外,C标准程序库还包含了许多其他常用的函数,如内存操作函数、日期时间函数、系统控制函数等。
这些函数能够帮助程序员进行各种系统级的操作,如内存管理、日期时间处理、系统调用等。
这些函数的使用能够极大地提高程序的功能和效率。
总结。
C标准程序库是C语言程序设计中非常重要的一部分,它包含了丰富的函数和宏定义,能够为程序员提供丰富的功能和工具。
C语言中常见功能函数

C语言中常见功能函数在C语言中,有很多常见的功能函数,它们是为了方便程序员在开发过程中进行一些常见操作而设计的。
下面是其中一些常见的功能函数:1.字符串操作函数:- strlen:用于获取字符串的长度。
- strcpy:用于复制字符串。
- strcat:用于拼接两个字符串。
- strcmp:用于比较两个字符串。
- strchr:用于在字符串中查找指定字符。
- strstr:用于在字符串中查找指定子字符串。
2.内存操作函数:- malloc:用于动态分配内存。
- free:用于释放动态分配的内存。
- memcpy:用于内存拷贝。
- memset:用于内存初始化。
3.文件操作函数:- fopen:用于打开文件。
- fclose:用于关闭文件。
- fgets:用于从文件中读取一行数据。
- fputs:用于向文件中写入一行数据。
- feof:用于判断是否到达文件末尾。
4.数学函数:- abs:用于计算绝对值。
- sin、cos、tan:用于计算三角函数值。
- sqrt:用于计算平方根。
- pow:用于计算幂运算。
5.随机数函数:- srand:用于设置随机数种子。
- rand:用于生成随机数。
6.时间函数:7.输入输出函数:- printf:用于向标准输出设备打印输出。
- scanf:用于从标准输入设备读取输入。
8.排序和查找函数:- qsort:用于对数组进行快速排序。
- bsearch:用于在有序数组中进行二分查找。
9.环境变量函数:- getenv:用于获取环境变量的值。
- setenv:用于设置环境变量的值。
10.字符处理函数:- isdigit:用于判断字符是否是数字。
- isalpha:用于判断字符是否是字母。
- isspace:用于判断字符是否是空白字符。
以上只是C语言中常见的一些功能函数,实际上C语言库中还有很多其他功能函数,可以根据需求选择合适的函数来完成相应的操作。
无论是字符串操作、内存操作、文件操作、数学运算,还是随机数生成、时间处理、输入输出以及排序和查找等,C语言提供了丰富的函数库来支持这些常见的功能需求。
c 标准库函数手册

c 标准库函数手册C 标准库函数手册。
C 标准库函数是 C 语言提供的一组函数库,它包含了一系列常用的函数,可以帮助程序员更高效地完成各种任务。
本手册将介绍 C 标准库函数的常用函数及其用法,帮助读者更加深入地理解和运用这些函数。
一、stdio.h。
stdio.h 是 C 语言中用来进行输入输出操作的头文件,它包含了一系列与标准输入输出相关的函数。
其中,最常用的函数包括 printf、scanf、fopen、fclose 等。
这些函数可以帮助程序员进行屏幕输出、键盘输入、文件读写等操作。
例如,printf 函数可以用来向屏幕输出格式化的字符串,而 scanf 函数则可以用来从键盘接收输入并存储到变量中。
二、stdlib.h。
stdlib.h 是 C 语言中的标准库头文件之一,它包含了一系列与内存分配、随机数生成、字符串转换等功能相关的函数。
其中,最常用的函数包括 malloc、free、rand、atoi 等。
这些函数可以帮助程序员进行动态内存分配、随机数生成、字符串转换等操作。
例如,malloc 函数可以用来动态分配指定大小的内存空间,而 rand 函数则可以用来生成一个指定范围内的随机数。
三、math.h。
math.h 是 C 语言中的标准数学库头文件,它包含了一系列与数学运算相关的函数。
其中,最常用的函数包括 sin、cos、sqrt、pow 等。
这些函数可以帮助程序员进行各种数学运算,如三角函数计算、平方根计算、幂运算等。
例如,sin 函数可以用来计算给定角度的正弦值,而 sqrt 函数则可以用来计算一个数的平方根。
四、string.h。
string.h 是 C 语言中的标准字符串库头文件,它包含了一系列与字符串操作相关的函数。
其中,最常用的函数包括 strlen、strcpy、strcat、strcmp 等。
这些函数可以帮助程序员进行字符串的长度计算、复制、连接、比较等操作。
例如,strlen 函数可以用来计算一个字符串的长度,而 strcpy 函数则可以用来将一个字符串复制到另一个字符串中。
了解编程中的五个模块化设计方法

了解编程中的五个模块化设计方法模块化是一种将复杂系统划分成独立的、可组合的部分的设计方法。
在编程中,模块化设计方法是将程序划分成多个独立的模块,每个模块实现一个特定的功能或目标,从而达到提高代码的可维护性、复用性和可测试性的目的。
下面介绍五个常用的模块化设计方法。
第一个模块化设计方法是面向对象编程(Object-Oriented Programming, OOP)。
面向对象编程中,将程序设计成由对象组成的集合,每个对象都有自己的属性和方法。
通过将相似功能的代码封装到对象中,可以更好地组织和管理代码。
面向对象编程可以将系统的复杂性分解为多个小的、可重用的对象,从而提高代码的可维护性和复用性。
第二个模块化设计方法是函数式编程(Functional Programming)。
函数式编程中,将程序设计成由一系列的函数组成,每个函数接受输入参数并产生一个输出结果。
函数式编程强调函数的纯粹性和不变性,通过将代码分解为小的、独立的函数,可以实现代码的可复用性和可测试性。
第三个模块化设计方法是模块化编程。
模块化编程将程序设计成由多个模块组成的集合,每个模块实现一个特定的功能。
模块化编程中,模块之间通过接口进行通信,对外提供封装好的接口,可以隐藏内部实现细节,提高代码的可维护性和复用性。
第四个模块化设计方法是插件化设计。
插件化设计将程序设计成由核心功能和可插拔的插件组成。
核心功能是基本的、不变的功能,插件是可扩展的、可替换的功能,通过插件可以扩展和定制核心功能。
插件化设计可以使系统更具灵活性和可扩展性,可以根据需求灵活地添加或替换功能。
第五个模块化设计方法是依赖注入(Dependency Injection)。
依赖注入是一种将依赖关系从程序中解耦的方法,通过将依赖对象注入到程序中,可以使程序更加灵活和可测试。
依赖注入可以减少模块之间的紧耦合,提高代码的可维护性和可测试性。
综上所述,以上是编程中常用的五个模块化设计方法。
C语言多功能模块设计

C语言多功能模块设计引言:C语言是一种广泛应用的编程语言,特别适用于系统级编程和嵌入式开发。
在软件开发中,常常需要设计和实现多功能模块,以提高代码的复用性和可扩展性。
本文将介绍C语言多功能模块的设计原则和实现方法,并通过实例详细说明。
一、设计原则1.高内聚低耦合:高内聚指功能相关的代码应该放在同一个模块中,低耦合指模块之间应该尽量减少相互依赖。
2.分解职责:将复杂的功能分解成多个小模块,每个模块只负责一个特定的功能,便于管理和维护。
3.接口一致性:模块之间通过接口进行通信,应该设计统一的接口规范,便于调用和扩展。
4.可配置性:将模块的可配置参数放在一个配置文件或结构体中,便于修改和管理。
二、实现方法1.模块的结构:每个模块应该包括头文件(.h)和源文件(.c),头文件声明模块的接口,源文件实现接口的具体功能。
2.模块初始化:在模块源文件中实现模块的初始化函数,用于初始化模块的状态和配置参数。
3.模块接口:在模块头文件中声明模块的接口函数,以及可能需要的数据结构和宏定义。
4.模块功能:在模块源文件中实现每个接口函数的具体功能,可以使用其他模块提供的接口,保证模块之间的互操作性。
5.模块扩展:如果需要扩展模块的功能,可以在源文件中添加新的接口函数,并在头文件中声明,保证模块的一致性。
6.单元测试:在模块源文件中实现单元测试函数,用于验证模块的功能和正确性。
三、实例说明假设我们需要设计一个多功能计算器模块,可以进行加法、减法、乘法和除法运算。
以下是实现的步骤:1.模块的结构:```- calculator.h(头文件)- calculator.c(源文件)- main.c(主函数文件)```2.模块的接口:```// calculator.h#ifndef CALCULATOR_H#define CALCULATOR_H//加法运算int add(int a, int b);//减法运算int subtract(int a, int b);//乘法运算int multiply(int a, int b);//除法运算int divide(int a, int b);#endif```3.模块的功能:```// calculator.c#include "calculator.h"int add(int a, int b)return a + b;int subtract(int a, int b)return a - b;int multiply(int a, int b)return a * b;int divide(int a, int b)if (b == 0)return 0; // 除数为0,返回0} elsereturn a / b;}```4.模块的扩展:```// calculator.h#ifndef CALCULATOR_H#define CALCULATOR_H//加法运算int add(int a, int b);//减法运算int subtract(int a, int b);//乘法运算int multiply(int a, int b); //除法运算int divide(int a, int b);//求平方根double squareRoot(double x); #endif``````// calculator.c#include "calculator.h"#include <math.h>int add(int a, int b)return a + b;int subtract(int a, int b) return a - b;int multiply(int a, int b) return a * b;int divide(int a, int b)if (b == 0)return 0; // 除数为0,返回0} elsereturn a / b;}double squareRoot(double x)return sqrt(x);```5.单元测试:```#include "calculator.h"#include <stdio.h>int maiint a = 4, b = 2;printf("Add: %d\n", add(a, b));printf("Subtract: %d\n", subtract(a, b));printf("Multiply: %d\n", multiply(a, b));printf("Divide: %d\n", divide(a, b));printf("Square Root: %f\n", squareRoot(a));return 0;```结论:本文介绍了C语言多功能模块的设计原则和实现方法,并通过示例详细说明了模块的设计、实现和扩展过程。
C语言程序设计第4讲模块化程序设计

高内聚、低耦合
高内聚、低耦合是模块化程序设计的另一个基本原则。高内聚要求模块的功能要 集中,每个模块只完成一个功能或一组密切相关的功能。低耦合则要求模块之间 的依赖关系要尽可能少,模块之间的接口要尽量简单。
在C语言中,可以通过合理地组织函数和变量来实现高内聚、低耦合的设计。例 如,可以将相关的函数和变量放在同一个源文件中,以减少不同源文件之间的依 赖关系。此外,还可以使用函数指针和回调函数等方式来减少模块之间的耦合度 。
通过将程序分解为可重用的模 块,可以避免重复编写相同的 代码,提高软件的可重用性。
模块化程序设计使得每个模块 的功能相对独立,便于对单个 模块进行修改、调试和升级, 而不会影响整个程序的运行。
02
函数
函数的定义和声明
总结词
了解函数的基本定义和声明方式,包括函数名、参数列表和函数体。
详细描述
在C语言中,函数是执行特定任务的代码块。它有一个名称,可以接受输入(参数),并返回一个结果(返回 值)。在程序中,函数需要先声明后使用。函数声明包括函数名、参数列表和返回类型,而函数定义则包括这些 信息以及函数体。
统的可伸缩性和可靠性。
03
持续集成/持续部署(CI/CD)
CI/CD是一种软件开发和部署方法,通过自动化的构建、测试和部署过
程,确保软件质量并加快开发速度。CI/CD有助于实现快速迭代和持续
改进,推动模块化设计的发展。
THANKS
感谢观看
主函数main()的设计
主函数main()是C程序的入口点,也是模块化程序设计中 的一个重要组成部分。主函数的设计应该遵循简单、清晰 的原则,只负责初始化程序和调用其他模块提供的函数。
在设计主函数时,应该避免在主函数中编写过多的代码, 而是将程序的主要逻辑放在其他模块中实现。此外,主函 数还应该负责程序的异常处理和资源释放等工作,以确保 程序的稳定性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1(一):连接SQL数据库一、连接数据库(SQL):(一)直接写在程序中1、导入动态连接库在StdAfx.h中:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace \ rename("EOF","adoEOF") rename("BOF","adoBOF")2、定义Provider宏在StdAfx.h中:#define Provider "Provider=SQLOLEDB.1;Integrated Security=SSPI;\Persist Security Info=False;Initial Catalog=HRMS"3、初始化a) .h文件中private:HDC m_hDC;DWORD m_CurrentRecord;_RecordsetPtr m_pRecordset;_ConnectionPtr m_pConnection;b) .cpp文件中CADOOperation::CADOOperation(){try{m_pConnection.CreateInstance(_uuidof(Connection));m_pConnection->Open(_bstr_t(Provider), "", "", adModeUnknown);}catch(_com_error e){AfxMessageBox(e.Description(), MB_OK);exit(0);}m_pRecordset.CreateInstance(_uuidof(Recordset));m_CurrentRecord = -1;}4、执行5、关闭CADOOperation::~CADOOperation(){m_pConnection->Close();}(二)通过login.ini文件连接void CBbbApp::IniAdo(){try{CString temp;char filepath[MAX_PATH];GetModuleFileName(NULL,filepath,MAX_PATH);temp = theApp.ExtractFilePath(filepath);//获取可执行文件的路径,也就是程序运行的.exe文件所在路径//运行后,temp的值为程序文件.exe 所在路径CString strAdoConn;char temp1[100];/*********************************************在同目录下创建login.ini文件,并在其中设置数据库连接字符串,如:[DatabaseConfig]Server=. // . 表示本机Database=BookManageUser=saPWD=sa*********************************************/GetPrivateProfileString("DatabaseConfig","Server","",temp1,100,temp+"login.ini");strserver = (TCHAR *)temp1;GetPrivateProfileString("DatabaseConfig","Database","",temp1,100,temp+"login.ini");strdbName = temp1;GetPrivateProfileString("DatabaseConfig","User","",temp1,100,temp+"login.ini");strUser = temp1;GetPrivateProfileString("DatabaseConfig","PWD","",temp1,100,temp+"login.ini");strPassword = temp1;strAdoConn.Format("driver={SQLServer};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",strserver, strUser, strPassword, strdbName);m_pCon.CreateInstance(_uuidof(Connection));m_pCon->ConnectionString = (_bstr_t)strAdoConn;m_pCon->Open("","","",NULL);m_pCom.CreateInstance("mand");m_pRs.CreateInstance(_uuidof(Recordset));m_pRs1.CreateInstance(_uuidof(Recordset));// ADOFLAG = TRUE;}catch(_com_error){//ADOFLAG = FALSE;Flag = FALSE;MessageBox(0,"请检查系统配置信息", "数据库连接失败",MB_OK);return;}catch(...){AfxMessageBox("SYS Error");return ;}}C++编程常用模块(二):连接Access数据库二、连接数据库(Access 2000)1、在.h文件中导入动态链接库#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace \ rename("EOF","adoEOF")rename("BOF","adoBOF")类定义:class ADOConn{public:BOOL ExecuteSQL(_bstr_t bstrSQL);ADOConn();virtual ~ADOConn();//添加一个指向Connection对象的指针_ConnectionPtr m_pConnection;//添加一个指向Recordset对象的指针_RecordsetPtr m_pRecordset;_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);void ExitConnect();void OnInitADOConn();};2、建立连接void ADOConn::OnInitADOConn(){//初始化OLE/COM库环境::CoInitialize(NULL);try{char filepath[MAX_PATH];GetModuleFileName(NULL,filepath,MAX_PATH);CString strdb;strdb = ExtractFilePath(filepath) + "sm.mdb";strdb = "DBQ=" + strdb;//创建connection对象m_pConnection.CreateInstance("ADODB.Connection");m_pConnection->ConnectionTimeout=3;//设置连接字符串,两种都可以//_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sm.mdb";_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=sm;";strConnect = strConnect + strdb;//SERVER和UID,PWD的设置根据实际情况来设置m_pConnection->Open(strConnect,"","",adModeUnknown);}//捕捉异常catch(_com_error e){//显示错误信息AfxMessageBox(e.Description());}}3、执行SQL语句//仅执行,无返回BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL){try{//是否已连接数据库if(m_pConnection==NULL)OnInitADOConn();m_pConnection->Execute(bstrSQL,NULL,adCmdText);return true;}catch(_com_error e){e.Description();return false;}}//返回记录集_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL){try{if(m_pConnection==NULL)OnInitADOConn();m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLo ckOptimistic,adCmdText);}catch(_com_error e){e.Description();}return m_pRecordset;}4、关闭连接void ADOConn::ExitConnect(){//关闭记录集和连接if(m_pRecordset!=NULL){m_pRecordset->Close();m_pRecordset=NULL;}if(m_pConnection!=NULL){m_pConnection->Close();m_pConnection=NULL;}//释放环境::CoUninitialize();}C++编程常用模块(三):窗体操作三、窗体操作1、显示对话框窗体CDlgLogin login ;login.DoModal();若要处理“确定”或“取消”:int nResponse = login.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is// dismissed with OK}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is// dismissed with Cancel}2、关闭对话框窗体EndDialog(0);或CDialog::OnCancel();或CDialog::OnOK();3、退出应用程序exit(0);4、登录:P308void CDlgLogin::OnButton1(){CString c_user,c_password;m_user.GetWindowText(c_user);m_password.GetWindowText(c_password);if (c_user.IsEmpty() || c_password.IsEmpty()){MessageBox("用户名称或密码不能为空", "用户登录信息");return;}CString sql;sql.Format("select * from tb_operator where name = '%s' and password = '%s'",c_user,c_password);m_pRs->raw_Close();m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimisti c,adCmdText);//if (m_pRs->RecordCount>0) 或者if (!myConn.m_pRecordset ->adoEOF){Flag = true; //Flag为全局变量user = m_pRs->GetCollect("name").bstrVal;password = m_pRs->GetCollect("password").bstrVal;EndDialog(0);}else{user = "";password = "";MessageBox("用户名或密码不正确.","提示",64);return;}}在程序启动初始化部分BOOL CBbbApp::InitInstance()函数里完成窗口跳转:if (Flag ==true){CBbbDlg dlg; //启动主窗体m_pMainWnd = &dlg;dlg.DoModal();}5、动态创建工具栏:P306方法(一):CToolBar m_toolbar;CImageList m_imagelist;m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON11));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON13));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON5));m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON19));UINT array[5];for(int i=0;i<5;i++){array[i]=5000+i; //创建索引}m_toolbar.Create(this);m_toolbar.SetButtons(array,5);m_toolbar.SetButtonText(0,"图书信息");m_toolbar.SetButtonText(1,"图书入库");m_toolbar.SetButtonText(2,"销售查询");m_toolbar.SetButtonText(3,"系统配置");m_toolbar.SetButtonText(4,"系统退出");m_toolbar.GetToolBarCtrl().SetButtonWidth(60,120);m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);m_toolbar.SetSizes(CSize(70,60),CSize(28,40));RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);/**************************原理************************先创建索引,再在resource.h中定义控件代表的索引,如#define IDB_bookinfo 5000#define IDB_booksell 5001#define IDB_sellinfo 5002#define IDB_set 5003#define IDB_cancel 5004最后在对话框的.cpp文件中将控件与响应函数关联起来BEGIN_MESSAGE_MAP(CBbbApp, CWinApp)ON_COMMAND(IDB_bookinfo, OnBookInfo)ON_COMMAND(IDB_booksell, OnBookInput)ON_COMMAND(IDB_sellinfo, OnSaleQuery)ON_COMMAND(IDB_set, OnButton4)ON_COMMAND(IDB_cancel, OnCancel)END_MESSAGE_MAP()******************************************************/方法(二):CImageList m_ImageList;CToolBarCtrl m_ToolBar;TBBUTTON tbButton[ICONSUM] = {0};m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON6));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON2));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON3));m_ToolBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0);m_ToolBar.SetImageList(&m_ImageList);for(int j=0; j< ICONSUM; j++){tbButton[j].dwData = NULL;tbButton[j].fsState = TBSTATE_ENABLED;tbButton[j].fsStyle = (BYTE)TBSTYLE_FLAT;tbButton[j].iBitmap = j;}tbButton[0].idCommand = ID_Info;tbButton[1].idCommand = ID_MR;tbButton[2].idCommand = ID_QS;tbButton[3].idCommand = ID_XS;tbButton[4].idCommand = ID_HELP;m_ToolBar.AddButtons(ICONSUM, tbButton);m_ToolBar.AutoSize();m_ToolBar.SetStyle(TBSTYLE_FLAT | CCS_TOP);6、设置菜单有效和失效有效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_ENABLED);失效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);7、设置状态栏CTime Time;Time = CTime::GetCurrentTime();CString Str = Time.Format("%Y-%m-%d");UINT Array[3];for(int i=0;i<3;i++){Array[i]=10000+i;}m_Statusbar.Create(this);m_Statusbar.SetIndicators(Array,3);m_Statusbar.SetPaneInfo(0,Array[0],0,150);m_Statusbar.SetPaneInfo(1,Array[1],0,450);m_Statusbar.SetPaneInfo(2,Array[2],0,150);m_Statusbar.SetPaneText(0,"用户:"+erID);m_Statusbar.SetPaneText(1,"CopyRight V1.0");m_Statusbar.SetPaneText(2,"当前时间:"+Str,true);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);8、设置菜单栏m_Menu.LoadMenu(IDR_MainMENU);SetMenu(&m_Menu);9、获得窗口WindowDC P464CWindowDC *dc = (CWindowDC *)GetWindowDC();10、文档框架关闭时,恢复程序主窗口void CPrintFram::OnClose(){theApp.m_mainfram = NULL;CPrintView* temp = (CPrintView*)this->GetActiveView();if (! temp->ispreview)theApp.m_pMainWnd = theApp.m_main;CFrameWnd::OnClose();}11、窗体标题栏加上图标先在头文件中声明:HICON m_hIcon;在构造函数中:m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);在OnInitDialog()中:SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon 在OnPaint()中:void CSmDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}在OnQueryDragIcon()中:HCURSOR CSmDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}12、设置工具栏先添加相应的图标资源再在OnInitDialog()函数中TBBUTTON tbButton[ICONSUM] = {0};m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON8));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON6));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON2));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON3));m_ImageList.Add(::AfxGetApp()->LoadIcon(IDI_ICON7));m_ToolBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0);m_ToolBar.SetImageList(&m_ImageList);for(int j=0; j< ICONSUM; j++){tbButton[j].dwData = NULL;tbButton[j].fsState = TBSTATE_ENABLED;tbButton[j].fsStyle = (BYTE)TBSTYLE_FLAT;tbButton[j].iBitmap = j;}tbButton[0].idCommand = ID_Sw;tbButton[1].idCommand = ID_BI;tbButton[2].idCommand = ID_MR;tbButton[3].idCommand = ID_QR;tbButton[4].idCommand = ID_XR;tbButton[5].idCommand = ID_HELP;tbButton[6].idCommand = ID_Exit;m_ToolBar.AddButtons(ICONSUM, tbButton);m_ToolBar.AutoSize();m_ToolBar.SetStyle(TBSTYLE_FLAT | CCS_TOP);13、对话框的淡入淡出效果#define AW_CENTER 0x00000010 //动画#define AW_HIDE 0x00010000 //隐藏BOOL CAutoMsgDlg::OnInitDialog() //淡入{CDialog::OnInitDialog();// TODO: Add extra initialization hereCenterWindow();DWORD dwStyle = AW_CENTER;HINSTANCE hInst = LoadLibrary("User32.DLL");typedef BOOL(WINAPI MYFUNC(HWND,DWORD,DWORD));MYFUNC* AnimateWindow;AnimateWindow=(MYFUNC *)::GetProcAddress(hInst,"AnimateWindow"); AnimateWindow(this->m_hWnd,1000,dwStyle);FreeLibrary(hInst);return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }void CAutoMsgDlg::OnbtnCancel() //淡出{// TODO: Add your control notification handler code hereDWORD dwStyle = AW_CENTER;HINSTANCE hInst = LoadLibrary("User32.DLL");typedef BOOL(WINAPI MYFUNC(HWND,DWORD,DWORD));MYFUNC* AnimateWindow;AnimateWindow=(MYFUNC *)::GetProcAddress(hInst,"AnimateWindow"); AnimateWindow(this->GetSafeHwnd(),700,AW_HIDE|dwStyle); FreeLibrary(hInst);CDialog::OnCancel();}C++编程常用模块(四):组合框用法四、组合框用法1、获取控件第一种方法:在向导中添加对应的变量第二种方法:CComboBox * com = (CComboBox*)GetDlgItem(IDC_COMBO5);2、清空m_SGrade.ResetContent();3、添加内容m_S.AddString("GB");m_S.AddString("ZH");4、移动到第一条记录ado.MoveFirst();5、移动到下一条记录ado.MoveNext();6、设置选项m_Department.SetCurSel(0);7、根据内容设值第一种:if(pare("男") == 0)((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);else((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(1);第二种:m_Dept.SetCurSel(m_Dept.FindString(0, str.GetBuffer(0)));8、获取索引int curSel = fieldCom->GetCurSel();9、选择改变严重注意:组合框要设置成Drop List的样式(Styles)void CAddInfo::OnSelchangeCOMBOS(){// TODO: Add your control notification handler code hereif(m_S.GetCurSel() != 0){m_SGrade.EnableWindow(false);}elsem_SGrade.EnableWindow(true);}10、绑定数据void CDlgSaleBack2::LoadCounterInfo(){m_counter.ResetContent();//删除所有的数据CString sql;sql = "select distinct counter from tb_counterinfo";m_pRs->raw_Close();m_pRs->Open((_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,a dCmdText);while (!m_pRs->adoEOF){m_counter.AddString((TCHAR*)(_bstr_t)m_pRs->GetFields()->GetItem("counter")->Value);m_pRs->MoveNext();}}11、获取数据严重注意:组合框要设置成Drop List的样式(Styles) m_WhereIsNow.GetWindowText(strWhereIsNow);C++编程常用模块(五):控件操作五、控件操作1、控件与变量关联起来在函数中:void CAddInfo::DoDataExchange(CDataExchange* pDX){…DDX_Control(pDX, IDC_personImage, m_personImage);DDX_Control(pDX, IDC_LIST, m_List);…}控件与动作关联起来在域中:BEGIN_MESSAGE_MAP(CAddInfo, CDialog)ON_BN_CLICKED(IDC_btnAdd, OnbtnAdd)ON_BN_CLICKED(IDC_btnModify, OnbtnModify)END_MESSAGE_MAP()2、获取控件((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1))->GetTime(&sysTime)3、设置控件的值SetDlgItemText(IDC_EDIT1, str); //文体框CTime date = CTime::GetCurrentTime(); //时间控件m_date.SetTime(&date);((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1))->SetTime(&sysTime);//时间控件//设置文体框属性((CEdit*)GetDlgItem(IDC_EDIT1))->SetFocus(); //定焦((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(0, -1);//设置框内容选定状态4、从控件中取值m_Name.GetWindowText(strName); //文件框m_Birthday.GetWindowText(strBirthday); //时间控件((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1))->GetTime(&sysTime); //时间控件GetDlgItemText(IDC_COMBO1, str); //组合框5、隐藏控件GetDlgItem(IDC_SEELIST)->ShowWindow(SW_HIDE);6、设置控件有效和失效有效:GetDlgItem(IDC_COMBOSGrade)->EnableWindow(true);失效:GetDlgItem(IDC_COMBOSGrade)->EnableWindow(false);7、移动焦点到编辑框m_Edit.SetFocus();m_Edit.SetSel(0,-1);8、使Date Time Picker只显示年月CDateTimeCtrl* pCtrl = (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER1); ASSERT(pCtrl != NULL);pCtrl->SetFormat(_T("yyyy-MM"));9、用IP Adress控件编辑IP地址(1)在OnInitDialog()函数中设置IP地址的默认值CIPAddressCtrl*m_Address=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1);m_Address->SetAddress(0,0,0,0);(2)输入IP地址,并显示出来CIPAddressCtrl* m_Address=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1);BYTE nField0;BYTE nField1;BYTE nField2;BYTE nField3;m_Address->GetAddress(nField0,nField1,nField2,nField3);CString str_IP;str_IP.Format("您输入的IP地址是:%d.%d.%d.%d",nField0,nField1,nField2,nField3);AfxMessageBox(str_IP);10、对编辑框输入内容进行控制(1)限制输入框的内容为数字创建一继承自CEdit类的新类,并在以后使用文本框时用该类定义,在此类中写:void COnlyNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: Add your message handler code here and/or call defaultif(nChar==8) //{CEdit::OnChar(nChar, nRepCnt, nFlags);return;}if((nChar<48 || nChar>57)) //Ö»ÔÊÐíÊäÈëÊý×ÖnChar = 0;elseCEdit::OnChar(nChar, nRepCnt, nFlags);}(2)对输入的身份证信息进行验证if(m_IDcard.GetLength() != 18){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}else{int num=0;char ch;for(int i=0;i<17;i++){ch = m_IDcard.GetAt(i);if(ch>47 && ch<58)num++;}if(i==17){ch = m_IDcard.GetAt(i);if((ch>47 && ch<58) || (ch==88 || ch==120))num++;}if(num != 18){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}else{CString syear = m_IDcard.Mid(6,4);int year = atoi(syear);CString smonth = m_IDcard.Mid(10,2);int month = atoi(smonth);CString sday = m_IDcard.Mid(12,2);int day = atoi(sday);BOOL leap;if(month<1||month>12){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}switch(month){case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(day<0 || day>31){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}break;case 4: case 6: case 9: case 11:if(day<0 || day>30){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}break;case 2:if(year % 4 == 0){if(year % 100 != 0)leap = TRUE;else if(year % 400 == 0)leap = TRUE;elseleap = FALSE;}elseleap = FALSE;if(leap){if(day<0 || day>29){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}elseif(day<0 || day>28){AfxMessageBox("ÊäÈëÉí·ÝÖ¤ºÅÂëÎÞЧ");return;}break;}}}}C++编程常用模块(六):文件操作六、文件操作1、查找文件CFileFind cf;if(cf.FindFile(strPictureFile)) // strPictureFile文件名{……}2、删除文件theFile.Remove(delfile); // delfile 文件名3、复制文件CopyFile(strFile,savefilename,false); // strFile源文件,savefilename目标文件4、保存到文件void PrintResult(CString &result){FILE * pFile;pFile = fopen("result.txt", "w");if(NULL == pFile){::MessageBox(NULL, "文件打开出错!", "提示", MB_OK);return ;}#ifdef _UNICODEfwrite(result.GetBuffer(0), 2, result.GetLength(), pFile);#elsefwrite(result.GetBuffer(0), 1, result.GetLength(), pFile);#endiffclose(pFile);}5、获取文件所在路径char filepath[MAX_PATH];GetModuleFileName(NULL,filepath,MAX_PATH); //可执行文件的全部路径(包括:路径+文件名)CString strFile = ExtractFilePath(filepath) + "Image.bmp";其中:CString CBbbApp::ExtractFilePath(LPTSTR filename) //返回的仅仅是路径{CString appname;appname = AfxGetAppName(); //获取可执行文件的文件名appname = appname+".exe";CString temp;int pos;temp = filename;pos = temp.Find(appname,0);temp = temp.Left(pos);return temp;}6、获取程序所在的根目录:P388GetCurrentDirectory(MAX_PATH,path);7、文件选择对话框使用CFileDialog fileDlg(TRUE, "bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp||", this);if(fileDlg.DoModal() != IDOK)return ;strPictureFile = fileDlg.GetPathName();C++编程常用模块(七):图片操作七、图片操作1、加载图片并显示出来char filepath[MAX_PATH];GetModuleFileName(NULL,filepath,MAX_PATH);CString strFile;strFile = ExtractFilePath(filepath) +"\\Image\\" + filename;CFileFind cf;if(cf.FindFile(strFile)){m_Photo =(HBITMAP)::LoadImage(::AfxGetInstanceHandle(), strFile, IMAGE_BITMAP, 150, 200,LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_DEFAULTSIZE);m_Picture.SetBitmap(m_Photo); //设置图片控件的内容}2、保存图片将图片文件名保存到数据库,文件本身保存到指定的文件夹中void CAddInfo::saveImage(CString strTime){CFileFind cf;if(cf.FindFile(strPictureFile)){char path[MAX_PATH];GetModuleFileName(NULL,path,MAX_PATH);CString savefilename;savefilename = ExtractFilePath(path) +"\\Image\\" + strTime;CopyFile(strPictureFile,savefilename,false);}return;}3、设置按钮图片P463m_Title.LoadBitmap(IDB_BITMAP10);m_Cross.LoadBitmap(IDB_BITMAP9);m_BitmapOK = ::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP7));m_BitmapCancel = ::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP8));m_OK.SetBitmap(m_BitmapOK);m_Cancel.SetBitmap(m_BitmapCancel);C++编程常用模块(八):ListView用法八、ListView用法1、初始化m_List.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);m_List.InsertColumn(0,"列一",LVCFMT_CENTER,80,0); //插入一列m_List.InsertColumn(1," 列二",LVCFMT_CENTER,80,1);m_List.InsertColumn(2," 列三",LVCFMT_CENTER,100,2);m_List.InsertColumn(3," 列四",LVCFMT_CENTER,100,3);m_List.InsertColumn(4," 列五",LVCFMT_CENTER,80,4);m_List.InsertColumn(5," 列六",LVCFMT_CENTER,80,4);2、绑定数据void CAddInfo::BindList(){m_List.DeleteAllItems(); //清空ADOConn lc;lc.OnInitADOConn();int i=0;CString strsql;strsql.Format("select * from t_stable");lc.m_pRecordset = lc.GetRecordSet((_bstr_t)strsql); //访问数据库得到数据集while(!lc.m_pRecordset->adoEOF){m_List.InsertItem(i,""); //插入一行m_List.SetItemText(i,0,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str1"));m_List.SetItemText(i,1,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str2"));m_List.SetItemText(i,2,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str3"));m_List.SetItemText(i,3,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str4"));m_List.SetItemText(i,4,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str5"));m_List.SetItemText(i,5,(char*)(_bstr_t)lc.m_pRecordset->GetCollect("Str6"));lc.m_pRecordset->MoveNext();i++;}lc.CloseConnect();return;}3、单击void CAddInfo::OnClickList(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code hereint pos = m_List.GetSelectionMark();str1 = m_List.GetItemText(pos,0);str2 = m_List.GetItemText(pos,1);……*pResult = 0;}4、双击void CDlgBookInfo1::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) {int row = m_list.GetSelectionMark(); //获取单击列表的行索引if (row !=-1){ //将选中行的信息显示在编辑框中m_bookname.SetWindowText(m_list.GetItemText(row,0));m_shortcode.SetWindowText(m_list.GetItemText(row,1));m_barcode.SetWindowText(m_list.GetItemText(row,2));m_author.SetWindowText(m_list.GetItemText(row,3));m_public.SetWindowText(m_list.GetItemText(row,4));m_price.SetWindowText(m_list.GetItemText(row,5));m_memo.SetWindowText(m_list.GetItemText(row,6));m_kinds.SetCurSel(m_kinds.FindString(0,m_list.GetItemText(row,7)));}*pResult = 0;}5、清空m_List.DeleteAllItems();6、获取指定行列的信息GetSubItemRect(row,col,LVIR_LABEL,rect);str =GetItemText(row,col);7、设置列宽P383RECT rect;m_list2.GetWindowRect(&rect);int wid = rect.right - rect.left;m_list2.SetColumnWidth(0,wid/4); //设置列宽m_list2.SetColumnWidth(1,wid/4);m_list2.SetColumnWidth(2,wid/4);m_list2.SetColumnWidth(3,wid/4);m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT); //设置列表扩展风格C++编程常用模块(九):常用类型操作与变换九、常用类型操作与变换1、CTime 到CStringa) 第一种:CTime Time;Time = CTime::GetCurrentTime();CString Str = Time.Format("%Y-%m-%d"); //年-月-日CString strNowTime = Time.Format("%H:%M:%S"); //时:分:秒b) 第二种:CTime nowTime=CTime::GetCurrentTime();CString strTime=_T("");CString temp;temp.Format("%d",nowTime.GetYear());strTime=strTime+temp;temp.Format("%d",nowTime.GetMonth());strTime=strTime+temp;temp.Format("%d",nowTime.GetDay());strTime=strTime+temp;temp.Format("%d",nowTime.GetHour());strTime=strTime+temp;temp.Format("%d",nowTime.GetMinute());strTime=strTime+temp;temp.Format("%d",nowTime.GetSecond());strTime=strTime+temp;2、CString 到CTimeSYSTEMTIME sTime={0};ChangeToDate(str1,&sTime);m_Birthday1.SetTime(&sTime);ChangeToDate(str2,&sTime);m_ Birthday2.SetTime(&sTime);void CAddInfo::ChangeToDate(CString str,void* sTime) {LPSYSTEMTIME lpTime = (LPSYSTEMTIME)sTime;int n,i;CString d,m,y;n=str.Find("-",0);y=str.Left(n);i=str.Find("-",n+1);d=str.Right(str.GetLength()-i-1);m=str.Mid(n+1,i-n-1);lpTime->wDay = atoi(d.GetBuffer(0));lpTime->wMonth = atoi(m.GetBuffer(0));lpTime->wYear = atoi(y.GetBuffer(0));}3、int 到CStringstrsql.Format("%d”,v);4、float 到CStringstrsql.Format("%f”,f);5、CString到intt = atoi(str);6、CString 到floatm = atof(str);7、字符串格式化strsql.Format("insert into t_stable (str0, str1,str2,str3,str4,str5,str6) values (1,'%s','%s','%s','%s','%s','%s')", str11, str22, str33, str44, str55,str66);8、字符串判空if(!str1.IsEmpty())9、清除字符串中的空格str.Replace(" ", "");C++编程常用模块(十):数据库备份和还原十、数据库备份和还原1、备份P433void CDBCopy::OnbtnLook() //浏览,选择文件夹{// TODO: Add your control notification handler code hereCString ReturnPach;TCHAR szPath[_MAX_PATH];BROWSEINFO bi;bi.hwndOwner=NULL;bi.pidlRoot=NULL;bi.lpszTitle=_T("请选择备份文件夹");bi.pszDisplayName=szPath;bi.ulFlags=BIF_RETURNONLYFSDIRS;bi.lpfn=NULL;bi.lParam=NULL;LPITEMIDLIST pItemIDList=SHBrowseForFolder(&bi);if(pItemIDList){if(SHGetPathFromIDList(pItemIDList,szPath))ReturnPach=szPath;}elseReturnPach="";m_CopyPath.SetWindowText(ReturnPach);。