安全传输平台项目——配置管理终端-框架搭建-初始化
在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
10-安全传输平台项目-第09天(配置管理终端-框架搭建-初始化)
一、复习
1、复习数据库写入
2、复习框架导入
》创建MFC项目:
主函数(类似于main)在SecMngAdmin0325.cpp中。
界面部分在MainFrm.cpp中,需要在其中添加启动的样式:
1)切换到“类视图”,在“CMainFrame”右键选择“类向导”,选择“类向导”,点击“虚函数”,点击“OnCreateClient”,点击“应用”,点击“确定”。
然后在其中添加代码:
>CMainFrame::OnCreateClient重写代码如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) {// TODO: 在此添加专用代码和/或调用基类if (!wndSplitter.CreateStatic(this, 1, 2)) return false;if (!wndSplitter.CreateView(0, 1,RUNTIME_CLASS(CFormBackground), CSize(0,0), pContext)) return false;//pContext->m_pNewViewClass RUNTIME_CLASS(CFormUserManager) CFormUserManagerDWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation; wndBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &wndSplitter, wndSplitter.IdFromRowCol(0, 0), dwf);wndBar.SetOwner(this);imaLarge.Create(32, 32, true, 2, 1);HICON hIcon;for (int i=0; i<7; ++i) {hIcon= AfxGetApp()->LoadIcon (nImages[i]);imaLarge.Add (hIcon);}wndBar.SetImageList(&imaLarge, CGfxOutBarCtrl::fLargeIcon);wndBar.SetImageList(&imaSmall, CGfxOutBarCtrl::fSmallIcon);wndTree.Create(WS_CHILD|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS, CRect(0,0,0,0), &wndBar, 1010);wndTree.SetImageList(&imaSmall, TVSIL_NORMAL); wndBar.SetAnimationTickCount(20); wndBar.SetAnimSelHighlight(200);wndBar.AddFolder("SecMngServer配置管理", 0);wndBar.AddFolder("SecMngAdmin网点管理", 1);wndBar.AddFolder("人员管理", 2);wndBar.AddFolder("设备管理", 3);//wndBar.AddFolder("CA人员操作查询", 4); wndBar.InsertItem(0, 0, "SecMngServer配置", 0, 0);wndBar.InsertItem(0, 1, "网点信息管理", 1, 0); wndBar.InsertItem(0, 2, "后台业务管理", 4, 0); //wndBar.InsertItem(0, 3, "后台交易查询", 5, 0); //wndBar.InsertItem(1, 0, "前台体系管理", 6, 0); wndBar.InsertItem(1, 1, "前台业务管理", 4, 0);wndBar.InsertItem(1, 2, "前台交易查询", 3, 0); wndBar.InsertItem(2, 0, "创建人员", 3, 0); wndBar.InsertItem(2, 1, "冻结人员", 4, 0); wndBar.InsertItem(2, 2, "解冻", 2, 0); wndBar.InsertItem(2, 3, "注销人员", 1, 0); wndBar.InsertItem(3, 0, "创建设备", 5, 0); wndBar.InsertItem(3, 1, "注销管理", 4, 0); wndBar.SetSelFolder(0);CRect r;GetClientRect(&r);int w1 = r.Width()/5;int w2 = r.Width()/4;wndSplitter.SetColumnInfo( 0, w1, 0 );wndSplitter.SetColumnInfo( 1, w2, 0 );wndSplitter.RecalcLayout();return true;//return CFrameWndEx::OnCreateClient(lpcs, pContext); }
CMainFrame::OnCreateClient
2)在MainFrm.h中,包含相应头文件,添加对象变量定义
添加
#include "GfxSplitterWnd.h" #include "GfxOutBarCtrl.h"
然后在class CMainFrame: public CFrameWnd中添加声明:
// 特性 public:CGfxSplitterWnd wndSplitter;CGfxOutBarCtrl wndBar; CImageList imaLarge, imaSmall; CTreeCtrl wndTree;
3)这时编译运行,只剩两个错误:
先解决第二个错误:
在 CMainFrame::OnCreateClient函数之前添加定义nImages:
static UINT nImages[] = {IDI_ICON_SET,IDI_ICON_USER,IDI_ICON_OP_LOG,IDI_ICON_LOG,IDI_ICON_REQ,IDI_ICON_RE,IDI_ICON_REPORT, };
然后添加7张图片:
ico目录下有(log.ico、op_log.ico、re.ico、report.ico、req.ico、set.ico、user.ico)7个ico图片放入项目的文件夹的下一级res目录下;然后打开“资源视图”,在“secmngAdmin411.rc”右键“添加资源”,点击“导入”,选择这7个ico文件,点击“打开”(这时多了一个Icon目录,里面有这7个文件),右键“属性”进行设置ID:
其ID 更改:IDC_ICON7(人图标)更改为:IDI_ICON_USER;
IDC_ICON6更改为:IDI_ICON_SET;
IDC_ICON5更改为:IDI_ICON_REQ;
IDC_ICON4更改为:IDI_ICON_REPORT;
IDC_ICON3更改为:IDI_ICON_RE;
IDC_ICON2更改为:IDI_ICON_OP_LOG;
IDC_ICON1更改为:IDI_ICON_LOG;
注意,每步更改后,点击“都保存”,会弹出警告-修改影响多处,点击“是”。
4)这时编译运行,只剩1个错误:
打开“资源视图”,添加“Dialog”:
在资源视图左侧“Dialog”处右键“插入Dialog”,然后删除“确定”和“取消”按钮,修改对话框的ID(在“IDD_DIALOG1”右键“属性”进行修改ID为:IDD_FORMBACKGROUND_FORM);
点击对话框,修改属性:修改Border属性“外框对话框”配置成None;Style属性“Popup”配置成child
点击对话框,右键“添加类”(或者“双击”),然后输入类名:CFormBackground,基类选择: CFormView
然后,包含类对象:在MainFrom头文件中添加 #include "FormBackground.h"
最后点击“运行”,会弹出:
二、安全传输平台项目——配置管理终端-框架搭建-初始化
1、重画背景onDrow
1)切换到“类视图”,选择“CFormBackground”,右键点击“类向导”,选择“虚函数”:
然后在其中添加代码:
>CFormBackground::OnDraw重写代码如下:(注意:函数注释掉的参数pDC打开!)
![](/assets/blank.gif)
![](/assets/blank.gif)
void CFormBackground::OnDraw(CDC* pDC) {// TODO: 在此添加专用代码和/或调用基类CRect clientRect;GetClientRect(&clientRect); for(int k = 13 ;k< 18;k++) //绘图示例—显示位图{CBrush* pTempBrush = NULL;CBrush OrigBrush;OrigBrush.FromHandle((HBRUSH)pTempBrush); CRect rc;GetClientRect(&rc);//ScreenToClient(&rc);try{CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP_BACK);CBrush brush(&bmp);pTempBrush = (CBrush*)pDC->SelectObject(brush);pDC->Rectangle(rc.left,rc.top, rc.Width(), rc.Height());pDC->SelectObject(&OrigBrush);break;}catch(CResourceException* e){e->ReportError();e->Delete();} }CRect rect;GetClientRect(&rect);CRect rect2;GetClientRect(&rect2);CFont font ;font.CreatePointFont(340, _T("Arial"));CString string = "欢迎使用KeyMngServer管理终端";pDC->SelectObject(&font);pDC->SetBkMode(TRANSPARENT);rect.OffsetRect(6, -90); //背影pDC->SetTextColor( RGB(192, 192, 192));pDC->DrawText(string, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);rect2.OffsetRect(0, -100);pDC->SetTextColor( RGB(0, 0, 0));pDC->DrawText(string, &rect2, DT_SINGLELINE|DT_CENTER|DT_VCENTER); }
void CFormBackground::OnDraw(CDC* pDC)
2)bmp目录下有(background.bmp)1个bmp图片放入项目的文件夹的下一级res目录下;然后打开“资源视图”,在“secmngAdmin411.rc”右键“添加资源”,点击“导入”,选择这1个bmp文件,点击“打开”(这时多了一个Bitmap目录,里面有这7个文件),右键“属性”进行设置ID:
其ID 更改:IDB_BITMAP1更改为:IDB_BITMAP_BACK;
最后点击“运行”,会弹出:
2、界面切换-CCfgView
CMainFrame类中添加视图切换自定义消息:
1)在MainFrame.h中添加自定义消息声明:
// 生成的消息映射函数 protected: DECLARE_MESSAGE_MAP() afx_msg long OnOutbarNotify(WPARAM wParam, LPARAM lParam);//声明
2)在MainFrame.cpp中添加自定义消息映射:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
… …
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify) // 注意不能添加分号!!!
……
END_MESSAGE_MAP()
3)在MainFrame.cpp中添加消息映射函数的实现
![](/assets/blank.gif)
![](/assets/blank.gif)
long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam) { switch (wParam){ case NM_OB_ITEMCLICK:// cast the lParam to an integer to get the clicked item{int index = (int) lParam;CString cText, cs1;cText = wndBar.GetItemText(index); CCreateContext Context;if (cText==_T("SecMngServer配置")){Context.m_pNewViewClass = RUNTIME_CLASS(CCfgView);Context.m_pCurrentFrame = this;Context.m_pLastView = (CView *)wndSplitter.GetPane(0,1);wndSplitter.DeleteView(0,1);wndSplitter.CreateView(0,1,RUNTIME_CLASS(CCfgView),CSize(500,0),&Context);CCfgView *pNewView=(CCfgView *)wndSplitter.GetPane(0,1); wndSplitter.RecalcLayout();pNewView->OnInitialUpdate();wndSplitter.SetActivePane(0,1); //IsHisKeyRecovry=0; }else if (cText==_T("网点信息管理")){ Context.m_pNewViewClass = RUNTIME_CLASS(CDlgNetInfo);Context.m_pCurrentFrame = this;Context.m_pLastView = (CView *)wndSplitter.GetPane(0,1);wndSplitter.DeleteView(0,1);wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDlgNetInfo),CSize(500,0),&Context);CDlgNetInfo *pNewView=(CDlgNetInfo *)wndSplitter.GetPane(0,1); wndSplitter.RecalcLayout();pNewView->OnInitialUpdate();wndSplitter.SetActivePane(0,1);} else if (cText==_T("后台业务管理")){//AfxMessageBox(cText);Context.m_pNewViewClass = RUNTIME_CLASS(CSysAll);Context.m_pCurrentFrame = this;Context.m_pLastView = (CView *)wndSplitter.GetPane(0,1);wndSplitter.DeleteView(0,1);wndSplitter.CreateView(0,1,RUNTIME_CLASS(CSysAll),CSize(500,0),&Context);CSysAll *pNewView=(CSysAll *)wndSplitter.GetPane(0,1); wndSplitter.RecalcLayout();pNewView->OnInitialUpdate();wndSplitter.SetActivePane(0,1); } }return 0;case NM_OB_ONLABELENDEDIT:// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item// return 1 to do the change and 0 to cancel it{/*if(IsLoginOutFlag == 1){AfxMessageBox("人员已登出,请重新登录CA人员以进行相应操作。");return 1;}*/OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);}return 1;case NM_OB_ONGROUPENDEDIT:// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder// return 1 to do the change and 0 to cancel it{/*if(IsLoginOutFlag == 1){AfxMessageBox("人员已登出,请重新登录人员以进行相应操作。");return 1;}*/OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);}return 1;case NM_OB_DRAGITEM:// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items// return 1 to do the change and 0 to cancel it{/*if(IsLoginOutFlag == 1){AfxMessageBox("人员已登出,请重新登录人员以进行相应操作。");return 1;}*/OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);}return 1;}return 0; }
long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
4)打开“资源视图”,添加“Dialog”:
(1)在资源视图左侧“Dialog”处右键“插入Dialog”,然后删除“确定”和“取消”按钮,修改对话框的ID(在“IDD_DIALOG2”右键“属性”进行修改ID为:IDD_DIALOG_CFG);
(2)点击对话框,修改属性:修改Border属性“外框对话框”配置成None;Style属性“Popup”配置成child;
(3)点击对话框,右键“添加类”,然后输入类名:CCfgView,基类选择: CFormView
(4)然后,包含类对象:在MainFrom头文件中添加 #include "CfgView.h"
(5)在IDD_DIALOG_CFG的Dialog中添加:
3、界面切换-网点信息管理界面NetInfo
(1)在资源视图左侧“Dialog”处右键“插入Dialog”,然后删除“确定”和“取消”按钮,修改对话框的ID(在“IDD_DIALOG3”右键“属性”进行修改ID为:IDD_DIALOG_NETMNG);
(2)点击对话框,修改属性:修改Border属性“外框对话框”配置成None;Style属性“Popup”配置成child;
(3)点击对话框,右键“添加类”,然后输入类名:CDlgNetInfo,基类选择: CFormView
(4)然后,包含类对象:在MainFrom头文件中添加 #include "DlgNetInfo.h"
(5)在IDD_DIALOG_CFG的Dialog中添加:
同理,
为COpTranView类添加Dialog资源(id可以命名:IDD_DIALOG_TRAN)
为CSysAll类添加Dialog资源(id可以命名:IDD_DIALOG_SYSALL)
4、多态知识回顾
面向对象:继承(子类可以使用父类的变量和函数)、多态、封装(功能相近和相似的代码集成)
多态:
1)父类指针指向子类对象;2)继承;3)虚函数重写
练习:
![](/assets/blank.gif)
![](/assets/blank.gif)
class parent {public:virtual void print(){printf("I am parent.\n");} }class child:public parent {public:virtual void print(){printf("I am child.\n");} }void howToPrint(parent *p) {p->print(); }int main() {parent p1;child c1;howToPrint(&p1);howToPrint(&c1);//多态 }
test.cpp
多态实现的原理:1)每个类对象有一个vptr指针,指向虚函数表首地址;2)虚函数表
5、多态分析和开源源码走读
为什么重写了OnCreateClient函数,可以实现左侧的样式?
》项目中的多态分析:
6、小结:
》对接开源框架相关:
1)创建MFC项目;
2)导入开源文件 9个(.cpp .h);
3)CString --> const char * 在项目上右键--> 属性 --> 字符集:使用unicode字符集 --> 使用多字节字符集;
VS2013:如果,上述操作不生效。使用管理员身份运行:vc_mbcsmfc.exe
4)导入.cur图片资源 --> MFC项目资源目录res中;
5)“资源视图”标签,任意一个目录上 右键“添加资源”-->“导入”选择res中的.cur 文件(3个)添加到项目中。
6)根据错误提示,修改ID;
7)添加消息宏定义 resource.h -->正常编译
#define ID_GFX_SMALLICON 50000 #define ID_GFX_LARGEICON 50001 #define ID_GFX_RENAMEITEM 50002 #define ID_GFX_REMOVEITEM 50003 #define ID_GFX_GROUPICON 50004 #define ID_GFX_FONTCICON 50005 #define ID_GFX_BACKCICON 50006
8)给CMainFrame类 重写父类的 onCreateClient() 虚函数;
9)添加代码实现 QQ 抽屉效果:(1)视图的切分;(2)视图的切换;
10)添加类对应头文件 --MainFrame.h
#include "GfxSplitterWnd.h" #include "GfxOutBarCtrl.h"
11)添加类变量 --MainFram.h
public:CGfxSplitterWnd wndSplitter;CGfxOutBarCtrl wndBar; CImageList imaLarge, imaSmall; CTreeCtrl wndTree;
12)添加控件Dialog
在“资源视图”的“Dialog”目录上右击,添加一个新的Dialog
修改ID、修改Dialog属性 Border --> None、修改 Style属性 Popup -->child
13)给Dialog添加类CFormBackground
继承自CFormView 类
#include "FormBackground.h" 添加到 MainFrame.cpp或MainFrame.h
14)onCreateClient() 函数实现之前 nImages 数组
static UINT nImages[] = {IDI_ICON_SET,IDI_ICON_USER,IDI_ICON_OP_LOG,IDI_ICON_LOG,IDI_ICON_REQ,IDI_ICON_RE,IDI_ICON_REPORT, };
15)导入.ico图片到项目res目录中
一次修改ID(7个)
16)添加背景图片
给CFormBackground 重写onDraw函数 -->用到bmp 图片资源
在函数内部添加代码。
导入 background.bmp图片
修改ID
17)完成视图切换功能
(1)添加消息声明
afx_msg long OnOutbarNotify(WPARAM wParam, LPARAM lParam);
(2)注册消息映射
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
(3)对应消息声明添加实现。-->MainFram.cpp
在函数内部添加代码。
18)添加控件Dialog
(1)在“资源视图”的“Dialog”目录上右击,添加一个新的Dialog
修改ID、修改Dialog属性 Border --> None、修改 Style属性 Popup -->child
给Dialog添加类CCfgView
#include "CfgView.h" 添加到MainFram.cpp 或 MainFram.h
【可选】在Dialog中添加控件
(2)在“资源视图”的“Dialog”目录上右击,添加一个新的Dialog
修改ID、修改Dialog属性 Border --> None、修改 Style属性 Popup -->child
给Dialog添加类CDlgNetInfo
#include "DlgNetInfo.h" 添加到MainFram.cpp 或 MainFram.h
【可选】在Dialog中添加控件
7、管理终端功能简析
8、初始化-获取配置文件路径
9、创建对话框
10、弹窗供用户输入信息
11、将用户录入数据保存ini文件
12、全局变量赋值及取消按钮
13、测试连接数据库
14、总结
在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
安全传输平台项目——配置管理终端-框架搭建-初始化相关推荐
- springboot 项目实战 基本框架搭建(IDEA)
springboot 项目实战 基本框架搭建(IDEA) IDEA下载 我使用的是破解的专业版IDEA,使用权一直到2089年: 下载IDEA: 下载processional版本,然后百度搜索激活码即 ...
- Cocos2d-x项目的游戏框架搭建
本篇所用的Cocos2d-x版本为:Cocos2d-x 3.2 Cocos2d-x项目的游戏框架搭建 游戏与应用项目其实差别不是很大,甚至有许多地方都是一样的,无非侧重点不同,手机游戏更侧重于用户的体 ...
- 数据安全传输平台项目笔记
项目介绍与密码学知识 项目整体架构图: 主要功能:对网络通信的数据进行加解密 基础组件: 数据序列化:protobuf socket通信:线程池,连接池 共享内存IPC Mysql数据库 数据加密:o ...
- Dubbo+Flutter在线交友平台教程第一天 项目介绍和框架搭建
课程介绍 <探花交友> 功能介绍 项目介绍 工程搭建 短信验证码 实现用户登录功能 1.功能介绍 探花交友是一个陌生人的在线交友平台,在该平台中可以搜索附近的人,查看好友动态,平台还会通过 ...
- C#项目实战WebApi框架搭建以及部署WebApi服务器的几种方式
1. Api接口的定义: API应用程序编程接口是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 操作系统想了一个 ...
- python做项目日程表_Flask框架搭建一个日程表
前言 用Flask框架,SQLalchemy,SQlite 和Vertabelo 搭建一个日程表. 这个并不是最终产品,目的是展示python web开发的流程,欢迎不吝赐教! github下载源码 ...
- 01-传智健康项目简介和框架搭建
视频地址是B站黑马程序员Java项目<传智健康> 这个项目是基于SSM架构的一个项目,因为现在都是采用SpringBoot架构,SSM项目比较老了,但是比较老的企业和一些国企还是采用传统项 ...
- JAVA Web项目开发SSM框架搭建(第一天)
- 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建
第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...
最新文章
- Android--SQLite(一)
- HTML 5 Web 音频
- Java Dom解析xml
- oracle创建表空间blocksize,oracle表空间大小的限制和DB_BLOCK_SIZE的概念
- js与Ajax实现浮动留言板(留言写入sqlserver数据库)
- 笔记:Chrome 对浏览器的改进
- 10 个功能独特且饱受好评的开源人工智能项目
- 高级软件测试11.27日小组工作-1701班第5组
- QA: Android 开发kotlin换行格式难看问题
- (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
- VC下__func__未定义,改用__FUNCTION__
- 身份证号判断是否合法(具体代码)
- 解析几何:第六章 二次曲面(1)球面 椭球面 双曲面
- 工作找了很多,兜兜转转,就是没遇到合适的,怎么办
- SAP ABAP ZBA_R001 查询用户下的角色,事务代码
- JavaScript实现随机彩票双色球
- mockjs的安装使用
- 什么是拦截器?什么是过滤器?
- 什么是UUID 以及UUID的版本
- 【Javascript 基础入门】
热门文章
- 应用层 HTTP 请求行
- 哪里看苹果是att_全面解读 iOS 14 ATT和SKAdNetwork
- 影响贝佐斯的12本书
- 【求助】AttachThreadInput 返回值为0,GetLastError取得的错误码为5(访问拒绝),怎么解决啊
- Struts2学习 表单校验——XML校验规则文件
- kali骚操作之基本配置
- 公文签收 php,下列关于公文收文办理的相关表述中,不正确的是()。A、收文办理中的签收要注明签收的时间B、对...
- 网易基于Filebeat的日志采集服务设计与实践
- 人工智能与深度学习概述
- python创建长度为n的数组_使用numpy库创建N纬数组(ndarray)的四种创建方法