C++中的mfc学习(1)

 

前言:本次学习是基于黑马程序员的视频教程写的,是为了做一个测量程序的窗口页面而学习的,教程的上的时间是3天完成,因为我在此之前学习过一部分了,本次目标也是在3天完成,并且能够写出来完整的程序为目的,

 

一、直接跳到实战(前面的看过了,不想看了)

环境:vs2010、win10

1、创建一个项目,按照如下步骤创建,需要修改的已经标出,不需要修改的没有截图,直接下一步就行

 

 

 

 

 

 

 

 

2、要想用scanf_s   printf_s等指令,需要添加预处理指令

(在解决方案管理器中做以下步骤)

项目——指令——c/c++预处理指令器——_CRT_SECURE_NO_WARNINGS

 

 

 

 

(2)设置窗口属性和将所需要的图片放入文件夹内

 

 

 

我找到原文档了,此笔记完结

 

我又回来了,资源视图里的添加icon添加不进去的原因是,图片必须是ico格式的

 

 

同时遇到问题

 

http://static.krpano.tech/image2ico在线转ico格式的网站

下面是完整的修改步骤,以及各部分注释

 

附代码: 

//设置图标, IDI_ICON1为图标资源ID(如果标红报错,不要管他), 此为 WINAPI 函数
//m_hWnd代表当前窗口的句柄指要修改的窗口
//GCL_HICON代表要修改的属性,还有光标样式等各种属性
//AfxGetApp()->LoadIconW加载图片api函数
SetClassLong(m_hWnd, GCL_HICON,
(LONG)AfxGetApp()->LoadIconW(IDI_ICON1));

 

 

//设置标题(有左标题和又标题)
SetTitle(TEXT("销售管理系统"));//修改右标题
//左标题在doc结尾的类的OnNewDocument中同理设置

 

3、添加一个自定义的类,功能是别人写好的,记得引入头文件,并测试这个类是否能用,以下是测试戴代码段

CenterWindow();//居中窗口,MoveWindows中的会失效,以上为前期的配置
//测试CInfoFile类
//CInfoFile file;
//CString name;
//CString pwd;
//file.ReadLogin(name,pwd);
//file.WritePwd("斧头帮帮帮主","123456");
//MessageBox(name);
//MessageBox(pwd);

4、添加一个登陆窗口

拖好控件

 

 

 (2)添加这个窗口到一个类中,方便以后引用

然后在

 

 然后添加成员变量

分别右键点击输入框,添加变量,修改为下面的

 

以下是在登陆按钮代码里面添加的代码

void CLoginDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);
if (m_user.IsEmpty()||m_pwd.IsEmpty())
{
MessageBox(TEXT("输入内容不能为空"));
return;
}
CInfoFile file;
CString user;
CString pwd;
file.ReadLogin(user,pwd);
if(m_user==user&&m_pwd==pwd)
{
CDialog::OnCancel();//CDialog是内置得的
}
else
{
MessageBox(TEXT("验证错误"));
}

}

还可以添加额外初始化 ,

修改两个bug,一个回车进系统,一个关闭进系统

下面是总体思想

 

 

 拆分窗口:

首先在CMainFrame中的。h文件中添加一个拆分窗口的对象

private:
CSplitterWnd m_spliter;

然后创建两个窗口类

然后重写CMainFrame里面的OCreateClient

// TODO: 在此添加专用代码和/或调用基类

m_spliter.CreateStatic(this,1,2);//拆分一行两列
m_spliter.CreateView(0,0,RUNTIME_CLASS(CSelectview),CSize(300,800),pContext);
m_spliter.CreateView(0,1,RUNTIME_CLASS(CDisplayView),CSize(900,800),pContext);


return TRUE;//代表自己拆分

 

 

下面创建书控件

首先在CSelectview里面生命两个对象

CTreeCtrl *m_treeCtrl; //树控件
CImageList m_imageList; //图标列表

 

然后

 

 

 添加代码如下:


void CSelectview::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
//初始化树视图
m_treeCtrl=&GetTreeCtrl();//拿到树控件
//准备图片集合
HICON icon=AfxGetApp()->LoadIconW(IDI_ICON1);
m_imageList.Create(30,30,ILC_COLOR32,1,1);//图的宽、高、32位色、一张图片、一个空间.
m_imageList.Add(icon);
m_treeCtrl->SetImageList(&m_imageList,TVSIL_NORMAL);//第一个参是定义的图片列表,第二个是显示模式是正常

//
//添加节点
m_treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);//参数分别为默认显示第0个图片,选中后显示第0个图片,父节点为空。
m_treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);

 

然后进行修改时间,从一项到另一项改变

 

 

修改的代码如下

 


void CSelectview::OnTvnSelchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
//获取当前选中项
HTREEITEM item=m_treeCtrl->GetSelectedItem();

//获取选中项的文本内容 CTreeCtrl::GetItemText
CString str = m_treeCtrl->GetItemText(item);
//MessageBox(str);
if (str == TEXT("个人信息"))
{
}
else if (str == TEXT("销售管理"))
{
}
else if (str == TEXT("库存信息"))
{
}
else if (str == TEXT("库存增加"))
{
}
else if (str == TEXT("库存删除"))
{
}

}

 

下一步进行编辑右边栏的内容

以此为创建新的dialog并且将这个dialog重新命名并修改为无边框格式(boder改为none)(style改为child)group box是用来把设置内部边框、edit control其中的readlyonly改为true是只读的模式

创建该窗口的类,命名为CUserDlg,并且选对基类CFormView

然后添加各个空间的变量 

 

然后界面挂载

首先定义5个宏在frameview

//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)

然后关联

 

posted @ 2019-07-17 11:11  刘冬冬的博客  阅读(2106)  评论(0编辑  收藏  举报