The Method
Create an empty Visual C++ 6.0 dialog-based application using the MFC wizard.
Add as many different controls as possible to the application (include edit
boxes, drop down list controls, check boxes, radio buttons, date control, etc.).
Add a button called IDC_SERIALIZE and double-click on it to add the function
below. Compile, run and fill in random data. When you click the serialize
button, the application will get all data filled from all the controls and
copy them into a CString that gets displayed. This is very useful for those
times when you need to capture all data in a window.
Note: This method does not handle all the different control types available.
void CTestDlg::OnSerialize()
{
int nCount = 0;
CString csText, csXMLReport;
CWnd* pWndInitial = GetFocus();
CWnd* pWnd = pWndInitial;
char Name[51];
csXMLReport = "<?xml version='1.0'?>\n";
csXMLReport += "<report xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n";
::SendMessage(this->m_hWnd, WM_NEXTDLGCTL, 0, 0);
pWnd = GetFocus();
GetClassName(pWnd->m_hWnd, Name, 50);
while (pWnd != pWndInitial)
{
pWnd->GetWindowText(csText);
csText.TrimLeft();
if (strcmp(Name,"Button") == 0)
{
if (IsDlgButtonChecked(pWnd->GetDlgCtrlID()))
{
csXMLReport += "<" + csText + ">";
csXMLReport += "1";
csXMLReport += "</" + csText + ">\n";
}
else
{
CheckDlgButton(pWnd->GetDlgCtrlID(), BST_CHECKED);
if (IsDlgButtonChecked(pWnd->GetDlgCtrlID()))
{
csXMLReport += "<" + csText + ">";
csXMLReport += "0";
csXMLReport += "</" + csText + ">\n";
}
}
}
else if (strcmp(Name,"Edit") == 0)
{
if (csText == "")
csText = "NULL";
csXMLReport += "<" + csText + "/>\n";
}
else if (strcmp(Name,"SysDateTimePick32") == 0)
{
csXMLReport += "<Date>" + csText + "</Date>\n";
}
::SendMessage(this->m_hWnd, WM_NEXTDLGCTL, 0, 0);
pWnd = GetFocus();
GetClassName(pWnd->m_hWnd, Name, 50);
}
csXMLReport += "</report>";
MessageBox(csXMLReport, MB_OK, NULL);
}