MFC(3)

模态对话框,非模态对话框

//模态对话框
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():控件和变量的关联和交换

如何移动按钮

  1. 先添加一个类
  2. 在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("男"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值