大概意思是有40个edit控件。向每个控件中输入数据。且有检测功能,如果有一个没有输入,则不能向下运行。最后将每个edit控件中的内容写入文件。现在问题来了,我不想对每个控件都操作一遍,想用循环一次搞定
C/C++ code// 你创建ID必须是有规则的,最好是连续的 #define IDC_EDIT1 1000 #define IDC_EDIT2 1001 #define IDC_EDIT3 1002 #define IDC_EDIT4 1003
-
C/C++ code
-
// .h中加 public : int nData[ 40 ]; // 加这条,根据你需要更改数组,如char或者double类型的 protected : HICON m_hIcon; // Generated message map functions // {{AFX_MSG(CXXDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnKillfocusEdit(UINT nid); // 加这条 virtual void OnOK(); // }}AFX_MSG DECLARE_MESSAGE_MAP()
-
C/C++ code
-
// .cpp中加 BEGIN_MESSAGE_MAP(CXXDlg, CDialog) // {{AFX_MSG_MAP(CXXDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CONTROL_RANGE(EN_KILLFOCUS,IDC_EDIT1, IDC_EDIT40,OnKillfocusEdit) // 加这条 // }}AFX_MSG_MAP END_MESSAGE_MAP()
void CXXDlg::OnKillfocusEdit(UINT nid)
{
// TODO: Add your control notification handler code here
CString str;
GetDlgItemText(nid,str);
if(!str.IsEmpty())
nData[nid-IDC_EDIT1] = atoi(str); //根据数组类型转成不同的类型
else
nData[nid-IDC_EDIT1] = 0; //为空的存0
}
void CXXDlg::OnOK()
{
// TODO: Add extra validation here
char szFilter[]= "文本文件 (*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog SaveDlg(false,NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter,this);
SaveDlg.m_ofn.lStructSize=sizeof(SaveDlg.m_ofn);
SaveDlg.m_ofn.hwndOwner = NULL;
SaveDlg.m_ofn.lpstrTitle= 保存为";
SaveDlg.m_ofn.lpstrDefExt="txt";
CString str;
if(SaveDlg.DoModal()==IDOK)
{
CFile m_fileSave;
CString strPathName=SaveDlg.GetPathName();
m_fileSave.Open(strPathName,CFile::modeCreate|CFile::modeWrite);
for(int i=0; i<40; i++)
{
str.Format("%d",nData[i]);
str += 0x0d;
str += 0x0a;
m_fileSave.Write(str,str.GetLength());
}
m_fileSave.Close();
}
// CDialog::OnOK();
}
[code=C/C++][/code]
///
void CXXDlg::OnKillfocusEdit(UINT nid) { // TODO: Add your control notification handler code here CString str; GetDlgItemText(nid,str); if ( ! str.IsEmpty()) nData[nid - IDC_EDIT1] = atoi(str); // 根据数组类型转成不同的类型 else nData[nid - IDC_EDIT1] = 0 ; // 为空的存0 } void CXXDlg::OnOK() { // TODO: Add extra validation here char szFilter[] = " 文本文件 (*.txt)|*.txt|所有文件(*.*)|*.*|| " ; CFileDialog SaveDlg( false ,NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this ); SaveDlg.m_ofn.lStructSize = sizeof (SaveDlg.m_ofn); SaveDlg.m_ofn.hwndOwner = NULL; SaveDlg.m_ofn.lpstrTitle = 保存为 " ; SaveDlg.m_ofn.lpstrDefExt = " txt " ; CString str; if (SaveDlg.DoModal() == IDOK) { CFile m_fileSave; CString strPathName = SaveDlg.GetPathName(); m_fileSave.Open(strPathName,CFile::modeCreate | CFile::modeWrite); for ( int i = 0 ; i < 40 ; i ++ ) { str.Format( " %d " ,nData[i]); str += 0x0d ; str += 0x0a ; m_fileSave.Write(str,str.GetLength()); } m_fileSave.Close(); } // CDialog::OnOK(); }
///
//
把控件ID定义为连续的数字:
#define IDC_EDIT1 101; #define IDC_EDIT2 102; ..... #define IDC_EDIT40 140; CString temp=""; for(int i=0;i<40;i++) { CSting Str=GetDlgItem(IDC_EDIT1+i)->GetWindowText(); if(Str==""} { return; } else temp+=Str; } if(i==40) //说明40个控件都有非空。 { } temp+= |