模态对话框,非模态对话框
//模态对话框
void CMainFrame::OnDialogShow()
{
//创建对话框对象
//运行
CDialog dlg(IDD_DIALOG1);
dlg.DoModal();//会阻塞,对象还在
// TODO: 在此添加命令处理程序代码
}
//非模态对话框
void CMainFrame::OnDialogShow32772()
{
// TODO: 在此添加命令处理程序代码
//最好当做成员变量CDialog dlg;要分配空间
//只能创建一次dlg.Create(IDD_DIALOG2);
dlg.ShowWindow(SW_SHOWNORMAL);
}
自定义对话框:把一个类和这个对话框关联起来。点击对话框的右键选择属性,添加类。
靠这个关联的对话框
//自定义对话框,引用头文件
void CMainFrame::OnDialog32773()
{
MyDialog dlg;
dlg.DoModal();
// TODO: 在此添加命令处理程序代码
}
基于对话框(控件)
应用程序类:继承于CWinApp
InitInstance():程序的入口地址
对话框类:继承于CDialogEx
OnInitDialog():对话框的初始化工作
DoDataExchange():控件和变量的关联和交换
如何移动按钮
- 先添加一个类
- 在dialog里面添加一个按钮,按钮添加变量,变量类型为添加的类。
void MyButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int x = rand() % 400;
int y = rand() % 400;
//按钮移动
this->MoveWindow(x, y, 100, 50);
CButton::OnMouseMove(nFlags, point);
}
//在Dlg当中初始化
m_button.SetWindowTextW(TEXT("逃跑"));
位图操作
通过路径设置
//宏定义
#define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
//可以设置它的大小
m_button.SetBitmap(HBMP(TEXT("../1.bmp"),100,50);
关联变量
通过UpdateDate(TRUE)把数据放到变量当中
通过UpdateDate(FALSE)把数据更新到所关联的对话框的对象
点击类向导可以一眼看到关联,而且可以增加和删除
复制内容,退出程序
//1.拷贝内容,并设置内容,天津爱变量类型为CEdit
void CMy02控件Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
//获取第一个编辑区的内容
CString str;
m_e1.GetWindowTextW(str);
//个第二个设置内容
if (str.GetLength() > 0) {
m_e2.SetWindowTextW(str);
}
}
2.拷贝方法添加的变量类型为CString
//把第一个编辑区的内容而更新到对应的变量
UpdateData(TRUE);
if (m_str.GetLength() > 0) {
m_str2 = m_str1;
//m_str2的内容鞥更新到对应的编辑区
UpdateData(FALSE);
//关闭
void CMy02控件Dlg::OnBnClickedButton5()
{
//CDialogEx::OnOK();
CDialogEx::OnCancel();
// TODO: 在此添加控件通知处理程序代码
}
单选框:在同一组单选框内,第一个单选框的GROUP属性里面选择TRUE,利用ctrl+D来查看顺序
//初始化CWnd::CheckRadioButton()
//前面两个参数,第一个为开始,第二个为结束,第三个参数为默认哪个被勾选
CheckRadioButton(IDC_RADIO4, IDC_RADIO5, IDC_RADIO4);
//获取单选框里面的内容
CString str;
if (IsDlgButtonChecked(IDC_RADIO4)) {
str = TEXT("男");
}
if (IsDlgButtonChecked(IDC_RADIO5)) {
str = TEXT("女");
}
MessageBox(str);
复选框
//初始化多选框 修改内容,属于CWnd的,基本所有控件都能使用
m_check1.SetWindowTextW(TEXT("游戏"));
//设置被选中,0表示未选中,1表示选中,2表示不确定
m_check1.SetCheck(1);
//获取选择得内容
CString str;
if (IsDlgButtonChecked(IDC_CHECK1)) {
str += TEXT("游戏\r\n");
}
if (IsDlgButtonChecked(IDC_CHECK2)) {
str += TEXT("舞蹈\r\n");
}
if (IsDlgButtonChecked(IDC_CHECK3)) {
str += TEXT("表演\r\n");
}
if (IsDlgButtonChecked(IDC_CHECK4)) {
str += TEXT("全能\r\n");
}
MessageBox(str);
列表框:选中列表框的莫一项,自动触发事件:LBN_SELCHANGE
void CMy03单选框,复选框,列表框,组合框Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
//添加,获取编辑区内容
UpdateData(TRUE);
if (m_str.GetLength() == 0) {
MessageBox(TEXT("内容不能为空"));
return;
}
//给列表框添加内容
m_listBox.AddString(m_str);
m_str.Empty();
//把内容更新到编辑区
UpdateData(FALSE);
}
void CMy03单选框,复选框,列表框,组合框Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
//删除,获取当前选中的位置
int i = m_listBox.GetCurSel();
m_listBox.DeleteString(i);
}
void CMy03单选框,复选框,列表框,组合框Dlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
//修改,先判断内容不能为空,然后再把当前选中的删掉,在当前位置在插入
//更新编辑区内容到m_str
UpdateData(TRUE);
if (m_str.GetLength() == 0) {
MessageBox(TEXT("内容不能为空"));
return;
}
//获取选中行的索引
int i = m_listBox.GetCurSel();
//删除指定行的内容
m_listBox.DeleteString(i);
//指定位置插入内容
m_listBox.InsertString(i, m_str);
//将m_str的内容清空
m_str.Empty();
UpdateData(FALSE);
}
void CMy03单选框,复选框,列表框,组合框Dlg::OnLbnSelchangeList1()
{
// TODO: 在此添加控件通知处理程序代码
//点击选中的内容自动触发
//获取选中的内容,更新到编辑区
//获取当前的行
int i = m_listBox.GetCurSel();
//获取指定的内容
m_listBox.GetText(i, m_str);
//更新到编辑区
UpdateData(FALSE);
}
组合框:属性data设置内容,不同的英文之间要用;
//添加内容
m_ccomboBox.AddString(TEXT("测试"));
m_ccomboBox.AddString(TEXT("舞蹈"));
m_ccomboBox.AddString(TEXT("表演"));
m_ccomboBox.AddString(TEXT("唱歌"));
//设置默认显示项
m_ccomboBox.SetCurSel(2);
//获取内容
CString str;
m_ccomboBox.GetLBText(0, str);
MessageBox(str);
滑块:滚动条事件不是本身应该在其父窗口 对话框类添加信息
//初始化
m_pos = 50;
//将数据更新到编辑区
UpdateData(FALSE);
//设置滑块范围
m_cscrollBar.SetScrollRange(1, 100);
//设置位置
m_cscrollBar.SetScrollPos(m_pos);
//第一个参数表示操作的哪个位置 第二个参数表示位置,点滑块才有值,不然没有,第三个表示滑块
void CMy04滑块Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//滑块事件处理
int pos;
if (pScrollBar == &m_cscrollBar) {
switch (nSBCode) {
//滑块位置
case SB_THUMBPOSITION:
{
m_cscrollBar.SetScrollPos(nPos); //设置滑块位置
m_pos = nPos;
UpdateData(FALSE);
break;
}
//向左的箭头
case SB_LINELEFT:
{
//获取滑块位置
pos = m_cscrollBar.GetScrollPos() - 5;
if (pos < 0) {
pos = 0;
}
m_cscrollBar.SetScrollPos(pos); //设置滑块位置
m_pos = pos;
UpdateData(FALSE);
break;
}
//向右的箭头
case SB_LINERIGHT:
{
//获取滑块位置
pos = m_cscrollBar.GetScrollPos() + 5;
if (pos > 100) {
pos = 100;
}
m_cscrollBar.SetScrollPos(pos); //设置滑块位置
m_pos = pos;
UpdateData(FALSE);
break;
}
//箭头和滑块之间的左边
case SB_PAGELEFT:
{
//获取滑块位置
pos = m_cscrollBar.GetScrollPos() - 10;
if (pos < 0) {
pos = 0;
}
m_cscrollBar.SetScrollPos(pos); //设置滑块位置
m_pos = pos;
UpdateData(FALSE);
break;
}
//箭头和滑块之间的右边
case SB_PAGERIGHT:
{
//获取滑块位置
pos = m_cscrollBar.GetScrollPos() + 10;
if (pos > 100) {
pos = 100;
}
m_cscrollBar.SetScrollPos(pos); //设置滑块位置
m_pos = pos;
UpdateData(FALSE);
break;
}
}
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
旋转控件:设置属性AutoBuddy自动的设置伙伴,但是它的顺序必须必伙伴大1,并且伙伴顺序不为0,设置Set Buddy Integer 设置数值
列表控件:常用1.list control 2.tree control 3.tab control
//设置风格样式LVS_EX_GRIDLINES网格
m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
//插入标题
CString head[] = { TEXT("姓名"),TEXT("年龄"),TEXT("性别") };
//插入列
m_list.InsertColumn(0, head[0], LVCFMT_LEFT, 150);
m_list.InsertColumn(1, head[1], LVCFMT_LEFT, 150);
m_list.InsertColumn(2, head[2], LVCFMT_LEFT, 150);
//插入正文内容,先确定行,再确定列
for (int i = 0;i < 10;i++) {
CString str;
//格式化字符串
str.Format(TEXT("mike%d"),i + 1);
m_list.InsertItem(i, str);
int j = 0;
j++;
//设置列
m_list.SetItemText(i, j, TEXT("18"));
j++;
m_list.SetItemText(i, j, TEXT("男"));