文章目录

  • 1基于对话框学习控件
  • 2 CStaticText 静态文本
  • 3编辑框使用
  • 4下拉框 CCombox
  • 5 ListContrl列表登件
  • 6CTreeCtrl树控件
  • 7 CTabCtrl 标签页使用
  • 项目笔记
    • 配置
    • 文件处理类CInfoFile引入
    • 登陆对话框
    • 静态拆分窗口
    • 树视图功能实现
    • 个人信息界面
    • 界面挂载
    • 个人信息完善
    • 销售管理窗口
    • 添加商品个数功能
    • 菜单栏设置

1基于对话框学习控件

1.1对话框 模态非模态
1.2按钮 两个captain修改内容 直接输入内容
1.3点击触发事件 右侧属性闪电图标;右键按钮 添加事件处理程序;双击按

1.4插入窗口 窗口 右键 添加类
1.5模态窗口创建 CDlgExe cdlg
1.5.1 dlg.DoModal()
1.6非模态创建
1.6.1 CDlgshow dlg 写到.h做成员
1.6.2 dlg.Create 写到初始化oninitDlalog 保证只创建一次
1.6.3 dlg.showWindow()

2 CStaticText 静态文本

2.1 添加变量以 STATIC为结尾的ID是不可以添加变量,需要修改ID
2.2设置内容 setWindowTextW
2.3获取内容 getWindowTextW 按钮也一样
2.4利用静态文本显示图片
2.4.1 bmp图片
2.4.2

#define   HBMP(filepath,width,height)
(HBITMAP)Loadimage(AfxGetinstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
m_pic.SetBitmap(HBMP(TEXT("./1.bmp"),rect Width(),rect.Height());

2.5如何禁用按钮
2.5.1 EnableWindow(FALSE)禁用

3编辑框使用

3.1EditCtrl 属性
3.1.1 mutiline多行
3.1.2 want returne
3.1.3 滚动条 无限横向 纵向的输入
3.2getWindowText setWindowText 设置和获取值
3.3默认小bug单行点击回车就退出
3.3.1重写OnOk 注释掉里面的代码
3.4退出当前对话框
3.4.1CDialog::Onok() OnCancel()
3.5添加变量时候 选择 value
3.6本身关联的变量 就是那个值
3.7UpdateData(TURE)
3.7.1将控件的内容同步到变量中

4下拉框 CCombox

4.1属性中加入数据 data 进行分割
4.2默认排序 sort 修改 false 不排序了
4.3 type 类型 DropList 不可以编辑
4.4添加AddString
4.5删除DeleteString
4.6插入InsertString
4.7设置默认选项 setCursel
4.8获取当前素引 getCursel
4.9根据索引获取内容 getLBText(索引,CString str)
4.10控件事件OnCbnSelchangeCombol

5 ListContrl列表登件

5.1 view 报表模式 Report
5.2 添加表头 InsertCol
5.3 添加正文 从0索引
5.4 添加第一行第一列 Insertitem(0,"张三");
5.5添加第一行的其他列 setItemText(行,列,具体内容)
5.6设置风格整行选中网格显示
5.7 m_list.SetExtendedStyle(m_list.GetExtendedStyle()I LVS_EX_FULLROWSELECTl LVS_EX_GRIDLINES);

6CTreeCtrl树控件

6.1设置属性、设置线、按钮
6.1.1 设置图标
HICON icons[4];
icons[0]=AfxGetApp()->LoadIconW(按钮ID);
6.2 设置图片集合
6.2.1 setlmagelist(Clmageust*list,正常显示的宏)(第三步)
6.2.1.1 list准备
CimageList list;(在类中声明为类成员)
create(30,30,32位色,4.4)(第一步)
6.2.1.2 add(HICON)(第二步)
6.3 添加节点
6.3.1InsertItem(节点名称,显示图片,选中后显示的图,父节点)
6.4设置默认节点
6.4.1 selectItem
6.5节点间切换触发事件OnTvmSelchangedTreel
6.5.1获取当前项 item=getSelectItem
6.5.2 CString str=getItemText(item)

7 CTabCtrl 标签页使用

7.1 引用Tabsheet.h .cpp2添加到项目中
7.2拖入控件 tabctrl
7.3添加变量类型Tabsheet类型
7.4创建两个标签页属性 border改为none style改为child
7.5标签页添加类
7.6王窗口中的头文件中先创建标签页的类成员
添加标 签 m_tab.AddPage(TEXT("系统设置"),&dlg1,IDD_DIALOG1)
7.7调用 show 方法显示出来

项目笔记

配置

mfc 单文档,去掉工具栏
项目-属性-c/c++预处理-预处理器定义 添加宏 _CTR_SECURE_NO_WARNINGS

主窗口 设置图标 添加icon 资源属性中修改ID号
CmainFrame 中的OnCreat()中 设置图标

//设置图标,ID_ICON.WIN为图标资源1D,此为WINApI函数
SetClassLong(m_hWnd,GCL HICOV,(LONG)AfxGetApp()->LoadlconW(IDI_ICON_WIN);

设置窗口标题(右侧)

SetTitle(TEXT(销售管理系统));

设置窗口标题 (左侧)

CSaleSystemDoc文档中的OnNewDocument()添加

setTitle(TEXT(销售管理系统));

主窗口大小,在相框CmainFrame中的OnCreat()设置

MoveWindow(0,0,800,500);//起点,宽高

CenterWindow();//居中显示

文件处理类CInfoFile引入

添加InfoFile .h .cpp文件

登陆对话框

  1. 添加对话框资源,并修改ID
  2. 登录窗口的设计
  3. 创建类,并关联。

在CSaleSystemApp的InitInstance()中修改,在CWinApp初始化之前创建以模态的 登陆窗口,(包含头文件)
CLoginDlg dlg;
dlg.DoModal();

实现点击登录按钮验证信息 登陆主窗口

  1. 关联用户名与密码变量
  2. 更新数据,拿到最新的值。UpdateData(TRUE);
  3. 登录按钮 点击事件,先判断是否为空。
    获取正确的值,(写入文本与配置文本一致),双重判断并弹出消息。
    若都一致,则退出对话框。CDialog::OnCancel();

实现默认有用户、密码登陆

  1. 对话框添加初始化函数(自己添加的对话框无初始化函数)

实现取消按钮,添加事件。

修改BUG

  1. 重写OnOK函数
  2. 重写WM_OnClose函数(关闭当前对话框)

静态拆分窗口

1自定义MFC视图类
自定义两个类:CSelectView和CDispalyView(它的基类必须是视图类)。
CSelectView继承于CTreeView,CDispalyView继承于CFormView.

添加类,MFC类。

通过CSplitterWnd类拆分窗口

  1. 在CMainFrame类(相框)中,声明CSplitterWnd m_spliter 对象。
  2. 先添加后 重写CMainFrame的OnCreatClient函数。
BOOL CMainFrame::OnCreateClent(LPCREATESTRUCT lpcS,CCreateContext*pContext)
/T0DO:套此添规麦用伐码和/感调用基类
//静态拆分窗口,1行2列,CSpliterwnd-isreatetaticr
m_spliter.CreateStatic(this,1,2);
//创建视图:CSli过erW/nsd:cceate/i意效
//0,0:放在第0听第0列的位置
//RUNTIME_CLASS(CSelextVie):需要头文件include“SelestView.h",
//CSelectView在SelectView.h中声明
//CSize(250,500]:指定视图宽度和高度
//pContet:为OnCreateClent()最后一个形参
m_spliter.CreateView(0,0,RUNTIME_CLASS(CSelectView),CSize(200,500),pContext);
//0,1:放在第0于第1列的位置
//sDispalWiew,需要头文件include"Dispalyiew.h”
m_spliter.CreateView(0,1,RUNTIME_CLASS(CDispalyWiew),CSize(600,500),pContext);
//return SFramewnd:QnCreateClientlecs,pcontext)
return TRUE;//代表自己拆分
)

树视图功能实现

  1. 添加功能节点

    1.1加载图标资源并改ID

  2. CSelectView 类中声明相应变量

    CTreeCtrl *m_treeCtrl;//树控住
    ClmageList m_imageList;//图标列表
    
  3. 重写CSelectView的OnInitialUpdate函数

void CSelectView::OnInitialUpdate()
{
CTtreeView::OnInitialUpdate();
//T0D0:在此添加专用代码或遇用基类//获取数视图中的过按件CIreeView::GetTreectrl
m_treeCtrl= &GetTreeCtrl();//图标资源的加载cWinApg:Loadlcon
//IOLICON.RE为图标资源ID
HICON icon =afxGetApp->LoadIconW(IDI_ICON_RE);
//图片列表的创建 clmagelist::Create
//80,30:指定图标的宽度和高度/nLC_CoLoR32:图标格式
//1,1:有多少图标就写多少
m_imagelist.Create(30,30,ILC_COLOR32,1,1);
//图片列表追加图标 Clmagelist::Add
m_imagelist.Add(icon);
//树控住设置图片列表 SIuseCtrd::SetlmageList
m_treeCtrl->SetImageList(&m_imageList,TVSIL_NORMAL);//树控件设置节点 cTreectrl:inserttem
m.treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);
m_treeCtrl->lnsertItem(TEXTT("销焦管理"),0,0,NULL);
m_treeCtrL->lnsertItem(TEXTI("库存信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXTI("库存添加"),0,0,ULL);
m_treectrl->lnsertItem(TEXT("库存删除"),0,0,NULL);
}

选中功能实现添加 事件 OnTvnSelchanged

1.得到选中的项 2 获取内容

个人信息界面

  1. 添加个人信息对话框并修改ID,在窗口属性中,Border 改为None,Style改为Child

  2. 选中对话框一>右击->添加类->类名:CuserDlg,基类选择CFormView

  3. 根据需求,控件关联所需变量
    身份编辑区关联CString m_user,用户名编辑框关联CString m_name,

    新密码编辑框关联CString m_newPwd,确定密码编辑框关联 CString m_surePwd。

界面挂载

自定义信息发送

  1. 在CMainFrame框架类中,添加自定义消息宏。

    //WM_USER是用户自定义消息的一个起始值
    //WM_USER+100是为了区分系统消息和用户消息,避免冲突
    #define NM_A(WM_USER+100)
    #define NM_B(WM_USER+101)
    #define NM_C(WM_USER+102)
    #define NM_D(WM_USER+103)
    #define NM_E(WM_USER+104)
    
  2. 在CMainFrame框架类中添加自定义消息处理函数:

    //自定义消息处理函数
    afx_msg LRESULT OnMyChange(WPARAM wParam,LPARAM IParam)
    
  3. 对应的.cpp定义其函数

  4. 在CMainFrane框架类BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加自定义消息入口,与自定义消息处理函数绑定。

//ON_MESSAGE响应的是自定义消息
//产生NM_X道息,自动调用OnMyChange的函数
ON_MESSAGE(NM_A,OnMyChange)
ON_MESSAGE(NM_B,OnMyChange)
ON_MESSAGE(NM_C,OnMyChange)
ON_MESSAQE(NM_D,QnMyChangs)
ON_MESSAGE(NM_E,OnMyChange)
  1. 发送自定义信号

    在CSelectView的OnTvnSelchanged函数中,发送自定义信号.

界面挂载函数(不用记)CMainFrame框架类中的OnMyChange函数里面

个人信息完善

  1. 初始化,CUserdlg属性中添加初始化函数

  1. 修改密码的双击确定事件

    先更新参数,拿到最新值。UpdateData(TRUE);

    判断是否为空,并弹出消息,不能为空。

    判断新密码和确定密码一直,并弹出消息,新密码与确定密码要一致。

    判断新密码与就密码一致性。

修改密码并清空

取消修改密码事件

void CUserD1g::OnBnClickedButton2()
{
//T0D0:在此添加控件通知处理程序代码
/取消按钮
//清空内容
m_newPwd.Eanypty();
m_surePwd.Enpty();
UpdateData(FALSE);
}

销售管理窗口

  1. 添加对话框资源,并修改ID,修改属性。设计界面,添加所需控件。

  2. 选中对话框->右击->添加类->类名:CSellDlg,基类选择CFormView。

  3. 根据需求,控件关联所需变量。
    商品名组合框关联CComboBox m_combo,

    单价编辑框关联int m_price,

    个数编辑框关联int m_num,

    销售信息编辑框关联CString m_sellInfo。

界面挂载

在CMainFrame 类中OnMyChange函数,添加如下代码:

case NM_B:
{//CSelIDla类需要包合头文件include"Selplg.h"+
Context.m_pNewViewClass=RUNTIME_CLASS(CSellDlg);
Context.m_pCurrentFrame = this;
Context.m_pLastView=(CForaView*) m_spliter.GetPane(0,1);
m_spliter.DeleteView(0,1);
m_spliter.CreateView(0,1,RUNTIME_CLASS (CSellDlg),CSize(600,0),&Context);
CSellDlg*pNewView=(CSellDig*) m_spliter.GetPane(0,1);
m_spliter.RecalcLayout();
pNewView->OninitialUpdate();
m_spliter.SetActivePane(0,1);
}breaks

功能实现

在类CSellDlg中设置初始化,并添加按钮事件,实现功能函数

在函数里调用切换事件,显示默认商品数目。

商品切换事件,并更新。

购买功能实现

  1. 先同步数据,拿到最新的。
  2. 检测数据 num必须大于0,数量不能大于库存。
  3. 获取购买商品名称,同步库存量,同步控件库存量
  4. 告诉用户购买信息。字符串拼接。
  5. 信息同步到变量,并显示与提示购买成功。
  6. 将最新的数据写到文件中。
  7. 清空购买数据与购买信息。

取消按钮事件

  1. 购买数量为0,并更新。
  2. 默认选中第一个
  3. 调用下拉框切换事件

添加商品个数功能

  1. 界面实现同上
  2. 功能实现,先拿到数据,再功能实现,最后需要同步到文件。
  3. 同步到左侧下拉框,并清空数据。

菜单栏设置

在资源视图,Menu中,添加事件处理程序,并实现事件处理功能。

黑马MFC教程总结(后续更新)相关推荐

  1. 黑马mfc案例教程_黑马指标使用吞吐量的案例

    黑马mfc案例教程 I've not come across many teams that use, let alone know that much about throughput. For t ...

  2. 黑马lavarel教程---13、分页

    黑马lavarel教程---13.分页 一.总结 一句话总结: - lavarel里面的分页操作和tp里面的分页操作几乎是一模一样的 - 控制器:$data=Lesson::paginate(2); ...

  3. 黑马lavarel教程---11、响应处理

    黑马lavarel教程---11.响应处理 一.总结 一句话总结: 如果在昂扬状态,看学习视频和运动时间重合,会很舒服 1.jquery的$.post参数为什么不需要占位? 因为每个参数的类型不同,可 ...

  4. 黑马lavarel教程---5、模型操作(AR模式)

    黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...

  5. 黑马lavarel教程---10、lavarel模型关联

    黑马lavarel教程---10.lavarel模型关联 一.总结 一句话总结: 1.模型关联比较方便,一次定义,后面都可以使用 2.关联关系 使用动态属性进行调用 1.一对多,多对多实例? 一对多: ...

  6. 黑马lavarel教程---9、缓存操作

    黑马lavarel教程---9.缓存操作 一.总结 一句话总结: legend2项目中自己写的哪些文件操作都可以通过这里的缓存实现,简单方便 1.lavarel中如何使用后端主流的缓存如 Memcac ...

  7. 黑马lavarel教程---6、简单验证

    黑马lavarel教程---6.简单验证 一.总结 一句话总结: 1.验证的最简单实例:$request的validate方法,验证通过可以继续进行,验证失败就重定向 2.中文提示可以用中文语言包 3 ...

  8. 黑马lavarel教程---4、csrf验证及相关

    黑马lavarel教程---4.csrf验证及相关 一.总结 一句话总结: csrf验证就像短信验证码那样验证用户身份,这个验证是为了验证是本站的操作,用的是一个token字符串,外站如果有了这个to ...

  9. SpringBoot2.0基础案例分类总结,后续更新计划说明

    一.基础案例 1.基础案例概览 历时一个半月,SpringBoot2.0基础案例的文章基本更新完毕了,基础案例包含了SpringBoot的基础教程,高级应用,日志配置,数据库使用,事务管理等.关于Sp ...

  10. MFC 教程【4_消息映射的实现】

    消息映射的实现 Windows消息概述 Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口.这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows. 消息的 ...

最新文章

  1. 机器学习处理流程、特征工程,模型设计实例
  2. Python 技术篇-不使用os模块遍历文件夹,pathlib库获取直接下级文件和所有下级文件
  3. 翻译 | 2015年的最佳Material Design集锦 【上篇】
  4. C++描述杭电OJ 2012. 素数判定 ||
  5. Effective C++学习第六天
  6. 解决思维导图软件Mindmanager Mindjet连接出错
  7. SQOOP——MySQL 和 HDFS 的桥梁
  8. 关于这个错误的不明原因的解决之道
  9. 《大数据技术原理与应用》林子雨 期末复习重点(总结)
  10. springcloud整合nacos启动时报错‘com.netflix.client.config.IClientConfig‘ that could not be found
  11. 《kiss the rain》与追求完美的矛盾个体
  12. 数字电子计算机在线,(),第一台数字电子计算机问世。A、1944年B、1945年C、1946年 - 作业在线问答...
  13. 1099 PIPI的油田(使用查并集)
  14. rocketmq源码③-Producer的启动、发送消息、路由broker
  15. 群晖docker中安装VS code
  16. 车载USB DVR(行车记录仪)的源码架构浅析(基于AndroiidM)
  17. 经典排序算法动图图解
  18. 如何去除视频水印?这几个方法帮你解决难题
  19. 微信小程序-灰度发布
  20. transformer中相对位置编码理解

热门文章

  1. 小型网站项目完整部署流程(Windows操作系统)
  2. 基于Python的情感分析案例——知网情感词典
  3. Delphi XE组件开发技术
  4. ftp客户端flashfxp破解教程
  5. c语言程序设计徐立辉答案,C语言习题
  6. 手把手教你用jmeter做压力测试(详图)
  7. Java中string,map,json之间的常用转换方法(json转map,map转json,json转string等)
  8. python初学入门——————输入输出语句
  9. 计算机鼠标是怎么工作的,嚣张的数字生活指南 篇一:罗技G604上手谈,多侧键鼠标会怎样提升我们的工作效率...
  10. Computer:Todesk(远程控制软件)的简介、安装、使用方法之详细攻略