文章目录

  • 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. 对话框添加初始化函数(自己添加的对话框无初始化函数)

黑马程序员ios面试题 黑马程序员mfc_编辑框

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

修改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;//图标列表
  1. 重写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)
  1. 在CMainFrame框架类中添加自定义消息处理函数:
//自定义消息处理函数
afx_msg LRESULT OnMyChange(WPARAM wParam,LPARAM IParam)
  1. 对应的.cpp定义其函数
  2. 在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函数中,发送自定义信号.

黑马程序员ios面试题 黑马程序员mfc_MFC_02

黑马程序员ios面试题 黑马程序员mfc_编辑框_03

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

黑马程序员ios面试题 黑马程序员mfc_MFC_04

个人信息完善

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

黑马程序员ios面试题 黑马程序员mfc_自定义_05

  1. 修改密码的双击确定事件
    先更新参数,拿到最新值。UpdateData(TRUE);判断是否为空,并弹出消息,不能为空。
    判断新密码和确定密码一直,并弹出消息,新密码与确定密码要一致。
    判断新密码与就密码一致性。

黑马程序员ios面试题 黑马程序员mfc_编辑框_06

修改密码并清空

黑马程序员ios面试题 黑马程序员mfc_MFC_07

取消修改密码事件

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中设置初始化,并添加按钮事件,实现功能函数

黑马程序员ios面试题 黑马程序员mfc_编辑框_08

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

商品切换事件,并更新。

黑马程序员ios面试题 黑马程序员mfc_MFC_09

购买功能实现

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

取消按钮事件

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

添加商品个数功能

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

菜单栏设置

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