01 模态对话框创建
更改标题名:
菜单栏 --> 视图—>工具箱 ,找到工具箱
导入两个按钮:
准备对话框:
插入就可以了,更改名称
双击按钮,可以进入点击事件
创建控件的类:右击->创建类
多了CDlgExex.h,并需要导入01 DialoglDlg
添加代码:
void CMy01Dialog1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//点击按钮,弹出模态对话框
CDlgExex dlg;
//模态方式弹出对话框
dlg.DoModal();
}
02 非模态对话框创建
其他步骤同01 步骤
void CMy01Dialog1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//弹出非模态对话框
//CDlgShow dlg; //保存到了成员属性中,不会被释放掉
//dlg.Create(IDD_SHOW); //不允许创建多次 dlg ,写到OnInitDialog初始化代码中
dlg.CenterWindow();//居中显示
dlg.ShowWindow(SW_SHOWNORMAL);
}
03 StaticText静态文本使用
更改标题名
IDC_STATIC中STATIC的控件不可更改,所有需要更改名称
右击-》添加变量,更改里面配置
查看属性变量
方法一:右击—》类向导
方法二:类视图
void CMy02StaticTextDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//点击设置按钮,设置为文本 呵呵
m_Text.SetWindowTextW(TEXT("呵呵"));
}
void CMy02StaticTextDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//点击获取按钮,获取到控件当前的文本
CString str;
m_Text.GetWindowTextW(str);
MessageBox(str);
}
设置图片:
添加控件,更改名称
更改名称:
为了一运行就有图片,需要初始化中添加
// TODO: 在此添加额外的初始化代码
//static Text显示图片
//设置静态控件窗口
m_Img.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
//通过路径获取bitmap句柄
#define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(), filepath, IMAGE_BITMAP, width, height,LR_LOADFROMFILE | LR_CREATEDIBSECTION)
//静态控件设置bitmap
m_Img.SetBitmap(HBMP(TEXT("./1.bmp"), 300, 250));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
上述图片显示不全,以下方案解决:
// TODO: 在此添加额外的初始化代码
//static Text显示图片
//设置静态控件窗口
m_Img.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
//通过路径获取bitmap句柄
#define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(), filepath, IMAGE_BITMAP, width, height,LR_LOADFROMFILE | LR_CREATEDIBSECTION)
//获取控件宽度和高度,设置到图片中
CRect rect;
m_Img.GetWindowRect(rect);
//静态控件设置bitmap
m_Img.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width(), rect.Height()));
获取按钮标签:
void CMy02StaticTextDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
//获取按钮当前内容
CString str;
m_btn.GetWindowTextW(str);
MessageBox(str);
//设置内容
m_btn.SetWindowTextW(TEXT(" ^ _^"));
//禁用按钮
m_btn.EnableWindow(FALSE);
}
04 CEditCtrl控件使用
防止敲回车,对话框消失,更改多行属性
相应换行,更改属性:
横纵向可以无限输入,更改属性:
回到第一行,增加滚动条,更改属性:
添加成员变量:
edit1初始化:
void CEditCtrlDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//点击赋值,将edit1内容,粘贴到edit2中
CString str;
m_edit1.GetWindowTextW(str);
m_edit2.SetWindowTextW(str);
}
void CEditCtrlDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//点击关闭
//退出整个程序
//exit(0);
//退出当前对话框
//CDialogEx::OnOK();
CDialogEx::OnCancel();
}
解决:一行输入回车,对话框没有
右击-》属性-》OnOK重写
void CEditCtrlDlg::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
//一按回车,关联OnOk代码
//CDialogEx::OnOK();
}
更改成员变量:
void CEditCtrlDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
//设置edit3内容
m_edit3 = TEXT("哈哈");
//将变量 同步到控件上
UpdateData(FALSE);
}
void CEditCtrlDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
//将控件里的内容,同步到变量中
UpdateData(TRUE);
MessageBox(m_edit3);
}
05 ComboBox下拉框使用
添加数据;更改属性:
想要数据按自己输入的顺序输出,更改属性:改为false
一般数据是代码中写的,需要进行如下操作:
当选中更改时,输出信息,需要重写下面这个函数:
// TODO: 在此添加额外的初始化代码
//在下拉框添加数据
m_cbx.AddString(TEXT("唐僧"));
m_cbx.AddString(TEXT("孙悟空"));
m_cbx.AddString(TEXT("猪八戒"));
m_cbx.AddString(TEXT("沙僧"));
//设置默认选中值 setCurrentSelect
m_cbx.SetCurSel(0);
//开除沙僧
m_cbx.DeleteString(3);
//添加白龙马
m_cbx.InsertString(2, TEXT("白龙马"));
//根据索引查找内容
CString str;
m_cbx.GetLBText(2, str);
MessageBox(str);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMy04ComboxCtrlDlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
//获取到当前索引,getCurrentSelect
int index = m_cbx.GetCurSel();
CString str;
m_cbx.GetLBText(index, str);
MessageBox(str);
}
06 CListCtrl控件使用
改成报表模式:
添加变量:
// TODO: 在此添加额外的初始化代码
//listctrl 控件进行初始化
//插入表头
CString str[3] = { TEXT("姓名"),TEXT("性别") ,TEXT("年龄") };
for (int i = 0; i < 3; i++)
{
m_list.InsertColumn(i, str[i], LVCFMT_LEFT, 100);
}
//设置正文,依然从0开始索引
//设置张三,当前行
//m_list.InsertItem(0, TEXT("张三"));
//补充张三行 其他内容
//m_list.SetItemText(0, 1, TEXT("男"));
//m_list.SetItemText(0, 2, TEXT("18"));
for (int i = 0; i < 10; i++)
{
int j = 0;
CString name;
name.Format(TEXT("张三_%d"), i);
m_list.InsertItem(i, name);
m_list.SetItemText(i, ++j, TEXT("男"));
m_list.SetItemText(i, ++j, TEXT("18"));
}
//设置风格,整行选中,加入网格线
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);//整行选中
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
07 CTreeCtrl 树控件使用
树形出现线,更改属性:
节点与节点之间有按钮:
根节点与根节点之间有线:
添加图片:
// TODO: 在此添加额外的初始化代码
//treeCtrl 控件使用
//1.设置资源
//准备HICON
HICON icon[4];
icon[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
icon[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
icon[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
icon[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
//CImageList list; 已经放在.h中,做成员属性了
//准备好list图标集合
list.Create(30, 30, ILC_COLOR32, 4, 4);
//加载图片
for (int i = 0; i < 4; i++)
{
list.Add(icon[i]);
}
m_tree.SetImageList(&list, TVSIL_NORMAL);
//2 设置节点
HTREEITEM rootItem = m_tree.InsertItem(TEXT("根节点"), 0, 0, NULL);
HTREEITEM parentItem = m_tree.InsertItem(TEXT("父节点"), 1, 1, rootItem);
HTREEITEM sub1 = m_tree.InsertItem(TEXT("子节点1"), 2, 2, parentItem);
HTREEITEM sub2 = m_tree.InsertItem(TEXT("子节点2"), 3, 3, parentItem);
//默认选中 子节点1
m_tree.SelectItem(sub1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
一个节点到另一个节点的事件:
void CMy06CTreeCtrlDlg::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
//获取到当前选中节点的内容
//获取当前选中的行 Item
HTREEITEM item = m_tree.GetSelectedItem();
//根据当前选中的行,获取里面的内容
CString str = m_tree.GetItemText(item);
MessageBox(str);
*pResult = 0;
}