版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
引项目简项目需网点相完成点与点之间数据加密、消息加密1:NN:N,级联(网点生命周期的管理)总行要验证分行的鉴别密钥相密钥管理实时分发、、校验、服易用性(第信息系统和安全传输平台解耦合保证修改的最少(第信息系统应该和我们的平台有效的解耦合)不业的特殊性需求加密强度(加密实时性其他需安全相关基础知Y=ax+b特点:加密密钥和密钥一样,密钥分发优点:加密密钥和密钥不一样,公钥和私钥;公钥可以公开,密钥钱是根子,密钥是金融系统根数字和数字是用户的网络,里面含有用户信息、用户的公钥EKY是用户的密钥载体介质,里面用户的私钥验证签名:用对端的数字中的公钥。对数据进行比对Hash算法:对一批数据,进行运算案例1:客户端A和服务器B双向认AB服务器B识别客户端A的流程为:A发送明文信息、对明文的签名信息、自己的公钥,将信息打包后,发送给B;B接受信息后,用A的公钥签名信息,得到明文2,校验明文是否一致。就可以验证A的身同理:客户端A也可以验证服务器的项目的要项目课训练什1)服务框架搭建和业务流调试、开子系统的对接联合调项目开发的经历是人生的一笔项目开发库的积科技、方案项目课学员注2)部分学员,为实现某一个功能,把相关的知识体系,全复习、学遍;效正确的做法:迭发,先出来一个模型,再说!()!项目开发管理流参考常见项目开档。项目议,项目经理需求和方项目讨论会,概要设计(子系统、模块,数据库、重要的流程图)和详测试(单元测试、对接安全传输平台需求分需求转化方案的思用户的需求是什程序员心态:需求转化成方案是项目组压力最大的时候;概要设计和详细阶段是最累的时项目需求分网点相完成点与点之间数据加密、消息加密(网点生命周期的管理)总行要验证分行的鉴别密钥相(密钥的生命周期管理)密钥管理实时分发、、校验、服易用性(第信息系统和安全传输平台解耦合保证修改的最少(第信息系统应该和我们的平台有效的解耦合)不业的特殊性需求加密强度(加密实时性方案功能分方案演演示基础组件:报文编 组件、安全通信组件、数据库统一接口组演示linux:secmngserver和演示第应用:外联接安全传输平台总体设方案特兼容性:兼容各种硬件平台、软件平台、设备方案架方案原第应用app,通过外联接口加密、数据linuxwin平台应用程序。密钥协商客户密钥密钥协商客户密钥协商客户密钥协商服务外联应外联应外联接密钥同步服务方案模块关外联接口外联接口外联接口统一安全统一安全通讯接 统一报文编 接 统一数据 接接密钥更密钥协商网点(子点密钥申密钥校密钥协商请求模密钥协商服务器(总点密钥协 业密钥协商服务模密钥协商网点管操使用外联接主流厂商硬 接各种国家安全规范标准CSP各种国家安全规范标准CSP主主流安全硬件厂商方案子系方案子系组件libicdbapi封装procoracle数据linux接口的封装SocketApiLinuxWinsocketwinlinuxwinlinux接口的封装12winlinux3winlinuxxmljsonhtmlDER接口的封装统一共享内存读12winlinux进程间通信机制IPC(共享内存、消接口的封装密钥协商服务程SecMngServer1linux23linuxLinux服务程密钥协商客户端 1linux2Win34linuxwinLinux信息系Win信息系密钥协商服务配置管理终端1MFC2各种win3winlinux4winodbcWin信息系外联接1接口设计与对称密钥加1使用第安全传输平台数1sql2oracle3安全传输平台sql的实信息系统数据库解决方案SecMngClientSecMngClientSecMngServer总体流AdminAdmin存求<流程名称SecMngServerAdmin,添加网点信息,配置启动密钥协商服务器(SecMngServer)服务程(SecMngClinet (AppInterface,平台总流程平台总流程外联应外联接密钥协商客户密钥协商服务配置终端配置网点信安全传输安全传输平台总业务SecMngClient请求密SecMngServer服SecMngServerAdmin初始化平密钥协密钥协商客户密钥协商服务启配置终端初始端应用<流程名称<阶段 12)框架和业务流13)配置管理(MFC)1前台框架和业务流(MFC)1外联接 14人+1学员产品成编号名称平台描 其CommMsgEncodeDecode(linuxwin)共享内存(win安全传输平台实报文编组件设计与实常见报文类超文本传输协超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广目的是为了提供一种发布和接收HTML页面的方法。1960年人TedNelson成为了HTTP超文本传输协议标准架构的发展根基。TedNelson组织协调TaskForce)RFCRFC2616定HTTP1.1。1.RequestResponseRequestHTTP(请求)必须只有<CR><LF>HTTP/1.1HostGET/User-Agent:Mozilla/5.0(Windows;U;WindowsNT6.0;en-US;rv:0) Accept-Language:en-us,en;q=0.5Keep-Alive:300If-Modified-SinceMon25May200903:19:18GMTResponse格式:HTTPHTTP/1.1200Cache-Control:private,max-age=30Content-Encoding:gzipExpires:Mon,25May200903:20:33Last-Modified:Mon,25May200903:20:03GMTVary:Accept-EncodingServer:-X-Powered-By:ASP.NETDate:Mon,25May200903:20:02消息体的内容(略文本标记语言,即HTML(HypertextMarkupLanguage),是用于描述网页文的一种标记语言一个网页对应于一个HTML文件,HTML文件以.htm或.html为扩展名。可以使用任何能够生成TXT类型源文件的文本编辑来产生HTML件。超文本标记语言标准的HTML文件都具有一个基本的整体结构HTML文件的开头与结尾标志和HTML23<title>namegoesVisibletextgoes 404filenot<a /">Thisisa<ahref="http /"><imgsrc="URL"alt="AlternateText"></a><a ">Sende-mail</a>Anamed<aname="tips">UsefulTips<ahref="#tips">JumptotheUsefulTipsLanguageHTML络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年人TedNelson构思了一种通过计算机处理文本信基。TedNelson组织协调网(WorldWideWebConsortium)和互联网工程工作小RFC2616HTTP1.1。总结:HTML是超文本标记语言,HTTP是协议,HTMLHTTPXML报XMLExtensibleMarkupLanguageSGMLXMLXML创立之初只是被当作一项基础技术,但其发展早已超出设计者原先的XML现在已经成现有的XML主要应用在四个方面:一是应用于具有不同复杂格式的不同数据源需求选择和制作不同的应用程序以处理数据,而服务器只需发出同一个XML文件;三是应用于将同一数据以不同的形式表现出来;四是应用于网络对所取事实上,XML技术的潜能还远未被充分挖掘。据一份的研究,以XML5102008年达到116亿的营业规模。以XML和Web服务为主的研究公司ZapThink在中也,这些以XML为基础并包括Web服务的工具,是将旧有系“XMLXML软件大量兴起:XMLXMLXSLT处理器、XSLFOXML——不只如此,还有网络浏览器也接受IBM、微软、SUN、惠普、Oracle等大公司纷纷进入这个市场。的软件产品中充分利用了XMLOffice2003更是将XML<!DOCTYPEproject<!ENTITYCommonSYSTEMBouncyCastleBuildConfiguration(midp)ThisistheJDK1.1specificbuildfile.$RCSfile:jdk11.xml,v$Author:bouncy$Date:2005/07/0613:02:52$Revision:<projectname="jdk11"default="init"<!--Publiccallabletargets--<targetname="clean"depends="common-clean"<targetname="test"depends="common-test"<targetname="dist"depends="common-dist"<targetname="compile" pile"<targetname="jdoc"depends="common-jdoc"<!--includecommontargets,properties--<!--**Privateproperties-- patibility"<includename="java/**" <includename="org/**"<includename="javax/**"<includename="org/bouncycastle/util/**"<includename="org/bouncycastle/asn1/**"<includename="org/bouncycastle/jce/**"<excludename="org/bouncycastle/jce/provider/X509 <!--tomakethefrigginthingcompile--<property piler"value="classic"<path<pathelementlocation="${bcp}"<target pile" pile"<!--extratargetsusedinthisfile--<target pile"<echo patibility" <classpathrefid="compile.cp"<echomessage="orgbc.lw-source"<javacsrcdir="${master.src}"<classpathrefid="compile.cp"<target pile"if="is.jce"<!--cheatabitheretoremoveduplication--<antcall <paramname="is.lw"value="true"<!--nowdotheextrabitsfortheJCE--<echomessage="orgbc.jce-source"<javacsrcdir="${master.src}"<classpathrefid="compile.cp"<echo patibility" patibility"<classpathrefid="compile.cp"JSONJavaScriptObjectNotationJavaScriptECMA-2623rdEdition-December1999要用于用于跟服务器进行交换数据。跟XML相类似,它独立于语言,在跨平台数上面是百科的解释,可以说明json大概的意思和作用,json其实就是键值对存vara={"one":"一","two":"二","three":"三"},a就是一个json,a.one的varb={"A":"[1,2,3,4,5,6,7]","B":"[a,b,c,d,e]"},b.A[0]变量里面还可以内嵌son,可以内嵌数组,取值方法就是如上面的那种,数组用下标,json取键值对的名,使用起来很方便,数据格式简洁自定struct{charname[32];intage;chardesc[1024]char*p//32} ASN.1抽象语法标 SyntaxNotationOne)ASN.1是一种ISO/ITU- ASN.1是描述在网络上传输信息格式的标准方法。它有两部分:一部分描述来是作为X.409的一部分而开发的后来才自己独立成为一个标准ASN.1在OSIISO8824/ITUX.208(说明语法)ISO8825/ITUX.209(说明基本编码规则)Report::=SEQUENCEauthorOCTETSTRING,titleOCTETSTRING,bodyOCTETSTRING,biblio}在这个例子中,"Report"SEQUENCE表示消OCTETSTRING,而最后一ASN.1语法表示它的意义:Bibliography::=SEQUENCE{authorOCTETSTRINGtitleOCTETSTRINGpublisherOCTETSTRINGyearOCTETSTRING}ASN.1布尔型整型实型位串类型8(OCTET枚举类型空类型对象标识符(OBJECT除基本类型,ASN.1SEQUENCESEQUENCEOF:C数组,由同一类C结构体类型CASN.1编码typedefstruct{charname[64];intage;char*p;intintmywritefile(unsignedchar*buf,int{FILE*fp=if(fp==NULL){printf("fopenfileerror\n");return-1;}fwrite(buf,1,len,fp);return}intTeacherEncode(Teacher*pStuct,unsignedchar**out,int{}intTeacherDecode(unsignedchar*inData,intinLen,Teacher{报文编码组件设计与实重点:深入理解,报文编码组件和业务流模块的解耦统一报文编码设计思统一报文编码实APIAPI(keymng_msg.c编码实现统一报文组件的业务流/linuxWin系统文件上传/linux系统文件编译/makefile#ifndef_KEYMNG_MSG_H_#define_KEYMNG_MSG_H_#ifdefcplusplusextern"C"{ //1密钥更新 //2密钥校验 //3密钥注销; typedefstruct{//1密钥更新//2密钥校验 //3密钥注 clientId[12];// serverId[12];//I typedef { clientId[12];// unsignedchar pstruct ;(指向相应结构体的指针type: 输入的类型标识(函数内部通过type得到pstruct所指向的报文类poutData:输出的编码后的报文;outlen: int *pStruct, unsignedchar **outData,/*out*/ *outLen); :输入的编码后的数据; :输入的数据长度;pstruct:输出的后的数据;(其空间是在内部开辟的,也需要用内部定义的free函数进行释放) :结构的类型标识(flag进行判断,pstruct转换为相应的结构)intunsignedchar*inData,/*in*/ **pStruct *type释放MsgEncode()outData;方法:MsgMemFree((void**)outData,0);type:输入参数,free函数intMsgMemFree(void**point,int#ifdef}统一报文编码样统一通讯组件设计与实统一通讯组件接口设Winlinux异构、跨平台连接的处理(短、长连接)解决的问题:稳定、易用;长连接短,socket连接池;断链修复;跨平台;linux内核的角度,理解三次握手和四次断开(全双工主动套接字和套接字,accept的函长连接和短实现的条5)socket连接池的设计理念统一通讯组件接口实#ifndef_poolsocket_H_#ifdefcplusplusextern'C'{#define #define #define #define #define #define #define (Sck_BaseErr+20)//创建连接池(没有达到最大连接数#define (Sck_BaseErr+21#defineSck_Err_Pool_GetConn_ValidIsZero(Sck_BaseErr+22)//有效连接数是零#defineSck_Err_Pool_HaveExist (Sck_BaseErr+22)//连接已经在池中#defineSck_Err_Pool_ValidBounds (Sck_BaseErr+22)//有效连接数目超//int//intsckClient_connect(char*ip,intport,intconnecttime,int//intsckClient_closeconn(int//intsckClient_send(intconnfd,intsendtime,unsignedchar*data,int//intsckClient_rev(intconnfd,intrevtime,unsignedchar**out,int*outlen);//intsck_FreeMem(void//inttypedefstruct_SCK{ intserverport;intbounds池容量intconnecttime;intsendtime;intrevtime;//socket//socketintsckCltPool_getConnet(void*handle,int//socketintsckCltPool_send(void*handle, unsignedchar*data,int//socketintsckCltPool_rev(void*handle, connfd,unsignedchar**out,int*outlen);//socketsocketintsckCltPool_putConnet(void*handleintconnfdintvalidFlag);0//socketintsckServer_init(intport,intintsckServer_accept(intlistenfd,inttimeout,intintsckServer_send(intconnfd,inttimeout,unsignedchar*data,intintsckServer_rev(int connfd,inttimeout,unsignedchar**out,int*outlen);//1intsckServer_close(intconnfd);#ifdef}共享内存操作组件设计与实共享内存基本基本操查看共享内操作共享内[it01@localhost~]$ :选项需要一个参数--m :illegaloption--?usage: [[-qmsqid][-mshmid][-s[-Qmsgkey][-Mshmkey][-Ssemkey]...Linux共享内存组件设计与实//#ifndef_WBM_MY_SHM_H_#define_WBM_MY_SHM_H_#include<stdio.h>#include<stdlib.h>#include#ifdefcplusplusextern"C"{ // //intIPC_CreatShm(intkey,intshmsize,int//intIPC_OpenShm(intkey,intshmsize,int 创建共享内存通过文 [out]共享内存的句柄.返回值 返回0函数执行成功;非0返回错误intIPC_CreatShmBySeedName(char*shmname,intshmsize,int*shmhdl); mapaddrout]返回值 返回0函数执行成功;非0返回错误intIPC_MapShm(intshmhdl,void**mapaddr); [in]共享内存首地返回值 返回0函数执行成功;非0返回错误intIPC_UnMapShm(void*unmapaddr); 返回值 返回0函数执行成功;非0返回错误intIPC_DelShm(intshmhdl);#ifdef}服务器框架设计与实SecMngclientSecMngServer总体业务流设11初始化22显示菜单:11初始化22显示菜单:密钥协商发送报文:接受应答:密钥校验:密钥注销组织报编码报发送报接受报写共享内客户端和服务器密钥协商//客户端和服务器密钥密钥校验流////客户端和服务器密钥注销SecMngClient设计SecMngClient集成报文编组件SecMngClient集成通讯组件SecMngClient集成共享内存组件SecMngClient集成日志组件////1 keymngserver创建服务器端共享内存,keymngserver创建共享内存根据最大网点 keymngclientkeymngserver重新协商密钥后,再做业//2 重新启动系统,则共享内存 管理员手工删除共享内存(软件运行中,不能删除共享内存,否则外联接口异常//3 //4//{unsignedchar *recvbuf=NULL; recvbuflen=0; ret= reqMsg // reqMsgType unsigned sendBuf sendBufLen KeyMng_Log(FILE,LINE,KeyMngLevel[2],ret,"functhread_routine()begin");connfd=*((int*)arg); //64bit8{recvbuf=NULL;recvbuflen=0;reqMsg //reqMsgType sendBuf sendBufLen //ret=sckServer_rev(connfd,3,&recvbuf,&recvbuflen);if(ret==Sck_ErrPeerClosed){KeyMng_Log(FILE,LINE,KeyMngLevel[4],ret,"业务线程中,funcsckServer_rev()err,对方已关闭");}elseif(ret=={//KeyMng_Log(FILE,LINE,KeyMngLevel[4],ret,",funcsckServer_rev()err,timeout超时");}elseif(ret!={KeyMng_Log(FILE,LINE,KeyMngLevel[4],ret,"业务线程中,funcsckServer_rev()err,接受报文失败");}ret=MsgDecode(recvbuf,recvbuflen,&reqMsg,&reqMsgType);if(ret!=0){KeyMng_Log(FILE,LINE,KeyMngLevel[4],ret,"funcMsgDecode()}//4处理请求根据业务类型组织应答报文ret=KeyMng_OpReal(reqMsg,reqMsgType,&sendBuf,&sendBufLen);if(ret!=0){sck_FreeMem((void**)&recvbuf);KeyMng_Log(FILE,LINE,KeyMngLevel[4],ret,"funcMsgDecode()}//5ret=sckServer_send(connfd,3,sendBuf,sendBufLen);if(ret!=0){sck_FreeMem((void**)&recvbuf);KeyMng_Log(FILE LINE,KeyMngLevel[4], }sck_FreeMem((void**)&recvbuf);MsgMemFree((void**)&reqMsg,reqMsgType);}KeyMng_Log(FILE,LINE,KeyMngLevel[2],ret,"functhread_routine()end");}SecMngServer设计1读配置文件2读配置文件3读数据库4显示菜单5:开端口启动服务 接,启动6业务线程做业务处理密钥协组织报发送:接受报 报文写共享内存密1234567商//1组织报//2编码报//3发送报//4接受报构//6写共享内
务线程应解析报文根据命令码123,做具体的业务给客户端应答报组织应答结构回复报SecMngServer集成通信组件SecMngServer集成共享内存组件SecMngServer集成数据库组件SecMngClientSecMngServer对接调1密钥DER报文编码错 gdb调试2密钥器端写oracle数据库错gdb调试数据传输库设oracle数据库使用常见问oracleoracle在linux环境中,用sqlplus工具oracle服在oracle用户下,用sqlplusoracle服务在非oracle用户下,用sqlplusoracle服务scott/aaod777/home/oracle_11/app–R同时配置在win环境中,用sqlplus工具linux环境下的oracle服1 net52 //linux服务器1521端口放3两个配置文件2)listener.ora数据传输参考数据库统一数据接口组件设计与实数据库接口设计思基于连接池的数据库方数据库接口实#ifndef_IC_DBApi_H_#define#ifdefcplusplusextern"C"{#ifndef#defineICDBHandle #ifndef#defineICDBCursor #ifndef#defineICDBLob #define #define #define #define #ifndefICDBFieldtypedefstruct_ICDBField{ #ifndefICDBRowtypedefstruct_ICDBRow{ICDBField* /*Level(如果[1]=01(debug),[2]=02(info),[3]=03(warning),[4]=04(error)),0则表//externintIC_DB_DTUseLevel[5];externintDTORADBLevel[5];/*程序名: /*功能描述:数据库连接池初始 /*参数说明: 连接池容 数据库名 数据库用 数据库用户口 intIC_DBApi_PoolInit(intbounds,char*dbName,char*dbUser,char*/*程序名: /*功能描述:从连接池获取数据库连 /*参数说明: 数据库连接句 sTimeout超时时间(秒 nsTimeout超时时间(毫秒 intIC_DBApi_ConnGet(ICDBHandle*handle,intsTimeout,int/*程序名: /*功能描述:释放数据库连接到连接 /*参数说明: 数据库连接句 数据库连接有效 intIC_DBApi_ConnFree(ICDBHandlehandle,intvalidFlag);/*程序名: /*功能描述:释放数据库连接 /*参数说明 intIC_DBApi_PoolFree();/*程序名 /*功能描述:执行单个非select数据库语句(不包含事务/*参数说明: 数据库连接句 数据库语 SelSql(ICDBHandlehandle,char*sql);/*程序名 /*功能描述:执行多个非select数据库语句(包含事务 /*参数说明: 数据库连接句 数据库语句(以NULL结束 SelSqls(ICDBHandlehandle,char*sqls[]);/*程序名 /*功能描述 数据库事务开 /*参数说明 数据库连接句 intIC_DBApi_BeginTran(ICDBHandlehandle);/*程序名: /*功能描述:数据库事务回 /*参数说明: 数据库连接句 intIC_DBApi_Rollback(ICDBHandlehandle);/*程序名 /*功能描述:数据库事务提 /*参数说明: 数据库连接句 mit(ICDBHandlehandle);/*程序名: /*功能描述:执行select数据库语句(返回单条记录 /*参数说明: 数据库连接句 数据库语 返回的记 intIC_DBApi_ExecSelSql(ICDBHandlehandle,char*sql,ICDBRow*row);/*程序名 /*功能描述 执行select数据库语句(返回多条记录 /*参数说明 数据库连接句 数据库语 返回记录的开始条 返回记录的条 返回的记 符合条件的记录总 intIC_DBApi_ExecSelSqlMR(ICDBHandlehandle,char*sql,intbeginNo,intcount,ICDBRow*rows,int*/*程序名 /*功能描述 打开游 /*参数说明 数据库连接句 数据库语 fieldCount字段个 游标指 intIC_DBApi_OpenCursor(ICDBHandlehandle,char*sql,intfieldCount,ICDBCursor*/*程序名 /*功能描述 通过游标获取数 /*参数说明 数据库连接句 游 返回的记 /*程序名 /*功能描述 关闭游 /*参数说明 数据库连接句 游标指 intIC_DBApi_CloseCursor(ICDBHandlehandle,ICDBCursor*pCursor);/*程序名 /*功能描述 PEM编码转DER编 /*参数说明 PEM数 pemDataLenPEM数据长 DER数 derDataLenDER数据长 intIC_DBApi_Pem2Der(char*pemData,intpemDataLen,unsignedchar*derData,int*/*程序名 /*功能描述 PEM编码转DER编 /*参数说明 DER数 derDataLenDER数据长 PEM数 pemDataLenPEM数据长 intIC_DBApi_Der2Pem(unsignedchar*derData,intderDataLen,char*pemData,int*/*程序名 /*功能描述 获取数据库时 /*参数说明 数据库连接句 数据库时 intIC_DBApi_GetDBTime(ICDBHandlehandle,char*dbTime);#define #define #define #define //SQLDA#defineIC_DB_SQLDAINIT_ERR //SQLDA初始化错误#defineIC_DB_SQLRELEASE_ERR //提交事务并释放连接语句错#defineIC_DB_SQLALTERDATE_ERR #defineIC_DB_SQLCONNECT_ERR #defineIC_DB_PTHREAD_MUTEX_INIT_ERR #defineIC_DB_PTHREAD_COND_INIT_ERR #defineIC_DB_SQLENABLETHREADS_ERR #defineIC_DB_MALLOC_ERR #defineIC_DB_CONNECTION_ERR #defineIC_DB_CONNECTION2_ERR #ifdef}客户端框架MFC设计与实主框架搭VC++实现的QQ主窗口抽屉菜单效果,应该说是一个面板吧,可以展开和折叠起OutlookOICQ视图的1)通AppWizard生成单文档单视图的应SecMngAdminGFXGROUPEDIT.CPPGFXGROUPEDIT.HGFXOUTBARCTRL.CPPGFXOUTBARCTRL.HGFXPOPUP.CPPGFXPOPUPgfxPub.h,GFXSPLITTERWND.CPPGFXSPLITTERWND.H 3IDIDC_HANDLECUR、IDC_DRAGGING和IDC_NODRAGGING在resource.h中添加控件消息#defineID_GFX_SMALLICON #define #define #define #define #define #define //DWORDdwVersion=::GetVersion();DWORDdwVersion=4;BOOLbWin4=(BYTE)dwVersion>=bNotWin4=1- //form_upBorder= ine=错 errorC4996:'GetVersion':被为已否d:\users\qiaojn\s\visualstudio2013\projects\mysecadmin_1\mysecadmin_1\gfxsplitterwnd.cpp451找不到资源视图在CMainFrame中添加视图切分功能a)在MainFrm.h中,包含相应头文件,添加对象变量定义添加#include"GfxSplitterWnd.h"#include"GfxOutBarCtrl.h"特 imaLarge, 添加重载OnCreateClient函BOOLCMainFrame::OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*使用类向导函数重写如下定义放在CMainFrame::OnCreateClient函数之前staticUINTnImages[]={下面是虚函数重BOOLCMainFrame::OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*{//TODO:在此添加代码和/或调用基if(!wndSplitter.CreateStatic(this,1,2))returnif(!wndSplitter.CreateView(0,1,RUNTIME_CLASS(CFormBackground),CSize(0,0),pContext))return//pContext->m_pNewViewClassRUNTIME_CLASS(CFormUserManager)DWORDdwf=CGfxOutBarCtrl::fDragItems|wndBar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&wndSplitter,wndSplitter.IdFromRowCol(0,0),dwf);imaLarge.Create(32,32,true,2,1);HICONhIcon;for(inti=0;i<7;{hIcon=AfxGetApp()->LoadIcon(nImages[i]);imaLarge.Add(hIcon);}wndBar.SetImageList(&imaLarge,CGfxOutBarCtrl::fLargeIcon);wndBar.SetImageList(&imaSmall,CRect(0,0,0,0),&wndBar,1010);wndTree.SetImageList(&imaSmall,TVSIL_NORMAL);wndBar.AddFolder("SecMngServer配置管理",wndBar.AddFolder("SecMngAdmin网点管理",wndBar.AddFolder("人员管理",wndBar.AddFolder("设备管理",//wndBar.AddFolder("CA人员操作查询",wndBar.InsertItem(0,0"SecMngServer配置0,wndBar.InsertItem(0,1网点信息管理1,wndBar.InsertItem(0,2,"业务管理",4,0);wndBar.InsertItem(0,3,"交易查询",5,0);wndBar.InsertItem(1,0前台体系管理6,wndBar.InsertItem(1,1前台业务管理4,wndBar.InsertItem(1,2前台交易查询3,wndBar.InsertItem(2,0创建人员3,wndBar.InsertItem(2,1冻结人员4,wndBar.InsertItem(2,2解冻2wndBar.InsertItem(2,3注销人员1,wndBar.InsertItem(3,0创建设备5,wndBar.InsertItem(3,1注销管理4,0);CRectr;intw1=r.Width()/5;intw2=wndSplitter.SetColumnInfo(0,w1,0wndSplitter.SetColumnInfo(1,w2,0);return//returnCFrameWndEx::OnCreateClient(lpcs,}编译源代码,出现如下问题。解决资源没有引入问 下,引入ico文user.ico导入到项目中,在资源试图中,做属性配添加CFormBackground创建Dialog资源IDD_FORMBACKGROUND_FORM,并为其创建资源类CFormBackground,CFormBackground类重载虚函voidCFormBackground::OnDraw(CDC*{//TODO:在此添加代码和/或调用基类CRectclientRect;for(intk13;k<18;k++)绘图示例—显示位{CBrush*pTempBrush=NULL;CBrushOrigBrush;CRectrc;{CBitmapbmp;CBrushbrush(&bmp);pTempBrush=(CBrush*)pDC-pDC->Rectangle(rc.left,rc.top,rc.Width(),rc.Height());}catch(CResourceException*{}}CRectrect;CRectrect2;CFontfontfont.CreatePointFont(340,CStringstring欢迎使用KeyMngServer管理终端rect.OffsetRect(6,90背pDC->SetTextColor(RGB(192,192,pDC->DrawText(string,&rect,rect2.OffsetRect(0,-pDC->SetTextColor(RGB(0,0,pDC->DrawText(string,&rect2,}注意1:父类.classCFormBackgroundpublic注意2:CFormBackground类资源的属Style属性配置成注意3:在MainFrom头文件中添加#include视图的CMainFrame类中添加视图切换自定义消息MainFrame.h中添加自定义消息afx_msglong ram,LPARAMMainFrame.cppBEGIN_MESSAGE_MAP(CMainFrame,…ON_MESSAGE(WM_OUTBAR_NOTIFY,MainFrame.cpplongCMainFrame::OnOutbarNotify(RAMram,LPARAM{switch({case//castthelParamtoanintegertogettheclicked{intindex=(int) ({Context.m_pCurrentFrame=this;Context.m_pLastView=(CView*)wndSplitter.GetPane(0,1);CCfgView*pNewView=(CCfgView*)wndSplitter.GetPane(0,1);}({Context.m_pCurrentFrame=this;}elseif(cText==_T("业务管理{Context.m_pNewViewClass=RUNTIME_CLASS(CSysAll);Context.m_pCurrentFrame=this;Context.m_pLastView=(CView*)wndSplitter.GetPane(0,1);CSysAll*pNewView=(CSysAll*)wndSplitter.GetPane(0,1);}}returncase//castthelParamtoanOUTBAR_INFO*struct;itwillcontaininfoabouttheedited//return1todothechangeand0tocancel{if(IsLoginOutFlag=={AfxMessageBox("CA人员以进行相应操作。");return1;}OUTBAR_INFO*pOI=(OUTBAR_INFO*)TRACE2("Editingitem%d,newtext:%s\n",pOI->index,pOI-}returncase//castthelParamtoanOUTBAR_INFO*struct;itwillcontaininfoabouttheedited//return1todothechangeand0tocancel{if(IsLoginOutFlag=={return1;}OUTBAR_INFO*pOI=(OUTBAR_INFO*)TRACE2("Editingfolder%d,newtext:%s\n",pOI->index,pOI-}returncase//castthelParamtoanOUTBAR_INFO*struct;itwillcontaininfoaboutthedragged//return1todothechangeand0tocancel{if(IsLoginOutFlag=={return1;OUTBAR_INFO*pOI=(OUTBAR_INFO*)TRACE2("Dragitem%datposition%d\n",pOI->iDragFrom,pOI-}return}return}1>e:\01_work\23_项目\secmng\secmng\mainfrm.cpp(334errorC2653:“CCfgView”:不是类1>e:\01_work\23_项目\secmng\secmng\mainfrm.cpp(338errorC2653:“CCfgView”:不是类1>e:\01_work\23_项目\secmng\secmng\mainfrm.cpp(339errorC2065:“CCfgView”:未1>e:\01_work\23_项目\secmng\secmng\mainfrm.cpp(339errorC2065:“pNewView”:未声1>e:\01_work\23_项目\secmng\secmng\mainfrm.cpp(339errorC2065:“CCfgView”:未CCfgViewDialog资源(idCDlgNetInfoDialog资源(id可以命名:IDD_DIALOG_NETMNG)CSysAllDialog资源(id可以命名:IDD_DIALOG_SYSALL)CCfgViewCCfgViewOnInitialUpdate多页创多页在项目开发中,是一个经典界面。样例如下创建框资源、创建创建视图类CSysAll,关联的框资源为创建视图类CDlgTab1,CDlgTab2CDlgTab3分别关联资源IDD_DIALOG_TAB1、CSysAllvoid{//TODO:在此添加代码和/或调用基类}在CSysAll类中添加页成员变量,包含相应头文 //CTabCtrlm_myTabCSysAllCTabSheetCSysAll//CTabCtrlm_myTab;CTabSheetm_myTab;CTabSheet的.h.cpp文件源码添加到项目文件中CSysAllWM_PAINT消息void{CPaintDCdc(this);//devicecontextforCRectrect,if((rect1.Width()<rect.Width()))TODO://}SecMngAdmin初始Admin若配置文件存在,则参若配置文件不存在,则弹出框让用户录入配置信SecMngAdmin配置参odbc连接和关闭数据int{CDatabase strCon.Format("DSN=%s;UID=%s;PWD=%s"g_dbSource,g_dbUseg_dbpw);g_pDB=&myDB;//这样操作速度快 //{if(!g_pDB->OpenEx(strCon,{AfxMessageBox("创建一条到数据源的连接发生错误,请检查数据源配置是否正确!");return-1;}{return-1;return}通过odbc驱动自动生成记录Odbc打开表查询和多次void{{"select*fromSECMNG.SRVCFGwhere'key={MessageBox打开ca.smSrvCfg表失败!数据库操作MB_MODEMASK);return;}if{}{m_strSvrIP=}srvCfgSet.m_strFilter.Format("key='%s'","secmng_server_port");if{}{m_strSvrPORT=}//srvCfgSet.m_strFilter.Format("key='%s'","secmng_server_maxnetnum");if{}{m_strSvrMaxNode空值}UpdateData(FALSE{{}}odbc新增和修改、事//1//2void{ dbtag=);//if{MessageBoxIP地址为空服务器配置错误MB_MODEMASK);return;}if{MessageBox端口为空服务器配置错误MB_MODEMASK);return;}if{MessageBox最大网点数为空服务器配置错误MB_MODEMASK);return;}CSECMNGSRVCFGsrvCfgSet(g_pDB);{srvCfgSet.m_strFilter.Format("key='%s'",{MessageBox打开ca.smSrvCfg表失败!数据库操作MB_MODEMASK);return;}if(!srvCfgSet.IsEOF({ // //update}else{ srvCfgSet.m_KEY="secmng_server_ip";srvCfgSet.m_VALUDE=m_strSvrIP; //insert}//srvCfgSet.m_strFilter.Format("key='%s'","secmng_server_port");if{}{srvCfgSet.m_KEY="secmng_server_port";srvCfgSet.m_VALUDE=m_strSvrPORT;}//srvCfgSet.m_strFilter.Format("key='%s'","secmng_server_maxnetnum");if{}{srvCfgSet.m_KEY="secmng_server_maxnetnum";srvCfgSet.m_VALUDE=m_strSvrMaxNode;}{dbtag={}if(dbtag=={MessageBoxSecMngServer配置信息失败数据库操作MB_MODEMASK);return;}{();//MessageBoxSecMngServer配置信息成功数据库操作}return}SecMngAdmin网点信息管CListCtrl属性配 report属CListCtrl控件的初始void{TODO:HIMAGELISThList=ImageList_Create(16,16,ILC_COLOR8|ILC_MASK,8,1);CBitmap m_imageList.Add(&cBmp,RGB(255,0,255));DWORDdwExStyle=ListView_GetExtendedListViewStyle( dwExStyle|=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; CRectrect;intnColInterval=rect.Width()/5;ode.InsertColumn(0,"网点编号",LVCFMT_LEFT,nColInterval);ode.InsertColumn(1,"网点名称",LVCFMT_LEFT,nColInterval);ode.InsertColumn(2,"网点创建时间",LVCFMT_LEFT,nColInterval);ode.InsertColumn(3,"网点状态",LVCFMT_LEFT,nColInterval);//TODO:在此添加代码和/或调用基}CListCtrl控件中插入简单ode(CStringode(CString&ID,CString&Name,CTime&time,intstate,int{ returnreturn//CStringstrAuthcode(authcode)charsprintf(buf,"%d",authcode);lvi.pszText=buf;//Setsubitemlvi.iSubItem=}else}//Setsubitemlvi.iSubItem=3;if(state==1){lvi.iSubItem=1; //Setsubitem1lvi.pszText=(LPTSTR)(LPCTSTR)Name;strTime=time.Format("%Y-%m-%d%H:%M:%S");lvi.iSubItem=2; //Setsubitem2lvi.pszText=(LPTSTR)(LPCTSTR)strTime;//Setsubitemlvi.iSubItem= lvi.mask LVIF_IMAGE|lvi.iItem0;//lvi.iImage=}}CListCtl控件中插入数据库数odbcvoid{ dbtag= *myW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论