1、新建对话框,创建类
在资源视图中创建一个对话框以后,右键选择“类向导”,界面如图所示,点击添加类,设置类名并继承CDialogEx类,完成。
2、ListBox
在资源视图中拖入listbox控件,在控件上右键选择 “添加变量” ,为其绑定一个变量,在添加变量之后,在该对话框类的头文件中会多出一行,变量成功与控件关联了
CListBox m_ListBox;为listbox动态添加选项,在DoDataExchange函数中添加以下代码:
DDX_Control(pDX, IDC_LIST1, m_ListBox); m_ListBox.AddString(L"方正"); m_ListBox.AddString(L"方正2"); m_ListBox.AddString(L"方正3"); m_ListBox.AddString(L"方正4");之后为listbox添加LBN_SELCHANGE事件,表示用户点击listbox切换了选项以后触发,获取listbox的数值
void Ctask4Dlg::OnLbnSelchangeList1() { int i = m_ListBox.GetCurSel(); if (i >= 0) { CString text; m_ListBox.GetText(i, text); // 写错了,不要& //MessageBox(text); SetDlgItemText(IDC_EDIT1,text); //IDC_EDIT1是texteditor的标识id } else { //AfxMessageBox("未选中。"); } }SetDlgItemText(IDC_EDIT1,text); 可以方便的向控件中写入数据。
3、TextEditor
可通过 SetDlgItemText(IDC_EDIT1,text); 来赋值,可以通过GetDlgItemText(IDC_EDIT1,text);来获取数据,另外,换行符号位:“\r\n”
4、 Radio Button
Radio Button一般是分组来用,需要分组比较容易,先弄一个Group控件,包起来,然后点击第一个Radio Button,查看属性中一个Group选项,设置为true,如果需要分第二组,则将第二组的第一个Radio Button的Group选项设置为true,这样,中间的Radio Button控件自动会归到组中的。下面是遍历Radio Button获取数值的程序:
UINT item2[] = {IDC_RADIO4,IDC_RADIO5,IDC_RADIO6}; for(int i=0;i<3;i++){ CString temp; CButton *pbtn2 = (CButton*)GetDlgItem(item2[i]); if(!pbtn2) continue; if(pbtn2->GetCheck()==1){ GetDlgItemText(item2[i],temp); temp+="\r\n"; } result += temp; //这里是串起来准备放到texteditor中 }
首先创建对话款,新建类比如Login类,然后在项目实现类(一般是CxxxAPP类)的InitInstance方法中加入创建对话框的语句:
//加入一个登陆框 Login m_loginDlg; if(m_loginDlg.DoModal() != IDOK) { return false; }在该对话框的资源视图上,双击登陆按钮,自动生成函数,就在该函数中编写登陆的程序,若登陆不成功,窗口将不会跳转
void Login::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //CDialogEx::OnOK(); CString name; CString pwd; GetDlgItem(IDC_EDIT1)->GetWindowTextW(name); GetDlgItem(IDC_EDIT2)->GetWindowTextW(pwd); if(name.Compare(_T("admin"))) { MessageBox(_T("用户名错误,请重新输入"),_T("提示")); } else if(pwd.Compare(_T("admin"))){ MessageBox(_T("密码错误,请重新输入"),_T("提示")); } else { OnOK(); } }
(1)对菜单增加事件处理:选中菜单项右键,选择“ 增加事件处理程序”,如下图所示,消息类型默认?? 类列表选择当前窗口所对应的类,如CMainFrame
这里我在函数中的具体实现是,打开另外一个对话框窗口,代码如下,当然,Calculate这个类以及他对应的窗口必须已经建立好了
//显示计算窗口 void CMainFrame::On32772() { // TODO: 在此添加命令处理程序代码 Calculate calculate; if(calculate.DoModal() != IDOK) { return ; } }