MFC对话框程序中的各组件常用方法:Static Text:将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改Caption属性:GetDlgItem(IDC_XX)->SetWindowText(L"dsgdhfgdffd");设置字体:CFont *pFont = new CFont;pFont->CreatePointFont(120,_T("华文行楷"));GetDlgItem(IDC_XX)->SetFont(pFont);Edit Control:设置文本:SetDlgItemText(IDC_XX,L"iuewurebfdjf");获取所有输入:建立类向导创建一个成员变量(假设是shuru1,shuru2……)类型选value,变量类型任选。
UpdateData(true);GetDlgItem(IDC_XX)->SetWindowText(shuru1);第一句更新所有建立了变量的对话框组件,获取输入的值。
第二句将前面的IDC_XX的静态文本内容改为shuru1输入的内容。
若类型选用control:1.设置只读属性:shuru1.SetReadOnly(true);2.判断edit中光标状态并得到选中内容(richedit同样适用)int nStart, nEnd;CString strTemp;shuru1.GetSel(nStart, nEnd);if(nStart == nEnd){strTemp.Format(_T(" 光标在%d" ), nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容shuru1.GetWindowText(strTemp);strTemp = strTemp.Mid(nStart,nEnd-nStart);AfxMessageBox(strTemp);}其中nStart和nEnd分别表示光标的起始和终止位置,从0开始。
strTemp.Format 方法用于格式化字符串。
AfxMessageBox(strTemp)显示一个提示对话框,其内容是字符串strTemp。
strTemp = strTemp.Mid(nStart,nEnd-nStart)返回一个被截取的字符串,从nStart开始,长度为nEnd-nStart。
如果nStart == nEnd说明没有选择文本。
注:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所选。
3.在edit的末尾添加字段:CString str;shuru1.SetSel(-1, -1);shuru1.ReplaceSel(str);4.随输入自动滚动到最后一行(richedit同样适用)shuru1.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);注:作密码使用,设置密码掩码字符用SetPasswordChar('*')方法。
5.如何限制edit输入指定字符创建一个CEdit的子类,自动化,并创建子类的WM_CHAR类型的消息:void CyxEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: 在此添加消息处理程序代码和/或调用默认值if ( (nChar>= '0'&&nChar<= '9') ||(nChar>= 'a'&&nChar<= 'f') ||(nChar>= 'A'&&nChar<= 'F') ||nChar == VK_BACK ||nChar == VK_DELETE) //msdn的virtual key{CEdit::OnChar(nChar, nRepCnt, nFlags);}}如果在对话框程序中不能正常接收消息,则还需要重载虚函数PreTranslateMessage:BOOLCMFCApplication3Dlg::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);return CDialogEx::PreTranslateMessage(pMsg);//或return 0;}这样才能正常接收VM_CHAR消息。
6.如何使用richedit添加AfxInitRichEdit();CxxxApp::InitInstance(){AfxInitRichEdit2();.............}注意:如果不添加该方法,可能会造成对话框无法生成或启动,程序闪退等现象。
7.改变richedit指定区域的颜色及字体CHARFORMAT cf;ZeroMemory(&cf, sizeof(CHARFORMAT));cf.cbSize = sizeof(CHARFORMAT);cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;cf.dwEffects = 0;cf.yHeight = 12*12; //文字高度cf.crTextColor = RGB(200, 100, 255); //文字颜色*cf.szFaceName = *_T(" 隶书" ); //设置字体待定shuru2.SetSel(1, 5); //设置处理区域shuru2.SetSelectionCharFormat(cf);8.设置行间距(只适用于richedit2.0)PARAFORMAT2 pf2;pf2.cbSize = sizeof(PARAFORMAT2);pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;pf2.dyLineSpacing = 200;pf2.bLineSpacingRule = 4;shuru2.SetParaFormat(pf2);ComboBox Contorl:1.在编辑状态下点那个控件的向下的三角形,就出冒出来一个可以调高度的东东。
将高度调高,否则在执行时会不能显示下拉选项。
2.为combobox添加选项,在编辑状态下选combobox控件的属性,选Data标签,在编辑框中添加选项,选项间用;分割。
boBox.SetCurSel(0)用来设置下拉菜单初始值。
4.常用方法有:xuanze1.ResetContent();//清除所有内容xuanze1.AddString(L"fdfjkfdj");//添加一项内容xuanze1.GetCurSel();//获取选择的行数xuanze1.SetCurSel(1);//设置所选行xuanze1.GetWindowTextW(strTemp);//获取文本xuanze1.GetCount();//获取总行数xuanze1.DeleteString(1);//删除某行xuanze1.InsertString(1,L"dskjjfjfkds");//将行插入到指定位置Radio Button:1.使用多组:在对话框编辑界面按下Ctrl+D,将单选框按想要的顺序点击,然后把每一组的第一个单选框的Group属性设为true。
2.获取选择状态:每组的第一个单选框ID可以设置一个变量。
选择int型,然后给每个单选框都设置一个BN_CLICKED事件,在其中改变这组单选框的变量:void CMFCApplication3Dlg::OnClickedRadio1(){danxuan1=1;}void CMFCApplication3Dlg::OnBnClickedRadio2(){danxuan1=2;}void CMFCApplication3Dlg::OnBnClickedRadio3(){danxuan1=3;}3.快速获取选择的位置(特别是一组中有很多单选框的时候):danxuan2=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);该函数返回从单选框IDC_RADIO1到IDC_RADIO3中被选上的ID号,使用时须确保他们在一个组里。
注意这里返回的是ID号,即假如IDC_RADIO3所代表的那个单选框被选上了,那么返回的是数字(具体多少看宏定义),所以检查的时候也要判断是否和IDC_RADIO3相等。
Check Box:关联一个BOOL类型的变量……MFC Edit Browse:获取文件路径:GetDlgItemTextW(IDC_MFCEDITBROWSE1,strTemp);MFC Date Time Picker:1.设置时间控件变量shijian,然后创建一个CTime变量存储时间,并将其转换为字符串。
CTime time;shijian.GetTime(time);CString strTime;strTime=time.Format("%Y-%m-%d"); //获取到的为日期如:2010-03-05 strTime=time.Format("%H:%M:%S"); //获取到的为时间如:16:27:33 2.获取当前时间并将其转换为字符串:CDateTimeCtrl m_DateItmeCtrl_Time;m_DateItmeCtrl_Time.SetFormat(_T("yyyy-MM-dd HH:mm:ss"));CTime TimeTemp=TimeTemp.GetCurrentTime();m_DateItmeCtrl_Time.SetTime(&TimeTemp);CString strTime;COleDateTime dtTime;strTime =dtTime.Format(_T("%Y-%m-%d %H:%M:%S"));3.将CString转换为COleDateTime类型:CString strTime =_T("2009-08-11 11:22:33");COleVariant VariantTime;VariantTime = strTime;VariantTime.ChangeType(VT_DATE);COleDateTime DataTime = VariantTime;shijian.SetTime(DataTime);4.注意SetTime方法的参数须为指针。