Serializing All Data in a Window into XML

Environment: Visual C++ 6.0 SP4 Windows 2000

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);
}

Downloads

None


Comments

  • Restoring data

    Posted by Legacy on 11/09/2001 12:00am

    Originally posted by: alex

    Is is a half of the work,wat are we saving for?

    Reply
  • Maintaining state

    Posted by Legacy on 11/04/2001 12:00am

    Originally posted by: rachan

    Nice way to maintain state of windows in an app

    Reply
  • good practice

    Posted by Legacy on 11/01/2001 12:00am

    Originally posted by: James Lee

    This is good start for you to practice. Also the effort is pretty encouraging.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: February 11, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT New computing platforms, expanding information environments, recurrent security breaches and evolving regulatory frameworks are factors that security executives must contend with and address when developing their security strategy. In response to these dynamics, security executives are seeking stronger, more nimble and more pervasive security technologies to help protect business-critical information from unauthorized disclosure, loss or …

  • Live Event Date: February 25, 2015 @ 2:00 p.m. ET / 11:00 a.m. PT Secure Shell (SSH) keys provide unmitigated access for privileged users and applications. However, managing and securing these critical privileged credentials poses a real challenge for organizations, putting sensitive data at risk. In fact, more than 50% of organizations report experiencing an SSH Key related compromise. Check out this upcoming eSeminar and join Adam Bosnian, EVP of Global Business Development at CyberArk, as he discusses the …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date