Solved

Creating a custom resource

Posted on 1998-05-05
9
444 Views
Last Modified: 2013-11-20
I would like to create a custom resource to define a specific column format. I want the format to have some
properties like the title, data type, position of the column, etc.. I want to be able to add it as a general
resource. How do I go about doing this?
Thanks.
0
Comment
Question by:pcasxd0
  • 5
  • 2
  • 2
9 Comments
 
LVL 1

Expert Comment

by:dkremer
ID: 1307756
Hi.
You can define the resource format in a CObject derived class that supports serialization, save the data to a normal file, then import it to your resource using Visual C++ import command. Then to access the data load the resource, lock it in memory, and use CMemFile to wrap the memory block, then CArchive with that file, and serialize your data back...
I'll try to create a simple sample for you and post it.

0
 

Author Comment

by:pcasxd0
ID: 1307757
That would be a life-saver. I hadn't done anything like this previously, so, I couldn't even understand much of what you said. :-) So, I hope that with some sample code, I could do better. Thanks.
0
 
LVL 1

Accepted Solution

by:
dkremer earned 150 total points
ID: 1307758
Ok... finished the little sample... send your e-mail and I'll mail it to ya.. :)
0
 
LVL 1

Expert Comment

by:dkremer
ID: 1307759
If you prefer... copy the uu-encoded sample and decode it :)
I'm feeling helpful today :)
begin 644 rcdata.zip
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
M4$L!`A0`%``"``@`!$RF),&_,X?D!```"`T```H``````````0`@`+:!X0,`
M`%)E861-92YT>'102P$"%``*```````$3*8D````````````````!```````
M`````!``_T'M"```<F5S+U!+`0(4`!0``@`(``1,IB3DY`T25`$``#8$```-
M````````````(`"V@0\)``!R97,O5&5S=#(N:6-O4$L!`A0`%``"``@`!$RF
M)/EU)&6J````C0$```T``````````0`@`+:!C@H``')E<R]497-T,BYR8S)0
M2P$"%``4``(`"`!W5Z8D7VW;XE$!```T`P``"@`````````!`"``MH%C"P``
M<F5S;W5R8V4N:%!+`0(4`!0``@`(``1,IB3C?E/>AP```,L````*````````
M``$`(`"V@=P,``!3=&1!9G@N8W!P4$L!`A0`%``"``@`J$VF)%M\+,T%`@``
M!`0```@``````````0`@`+:!BPT``%-T9$%F>"YH4$L!`A0`%``"``@`;5>F
M)!'MXN%"````1`````@````````````@`+:!M@\``%1E<W0N='-T4$L!`A0`
M%``"``@`FE:F)*U^//\>`@``A08```D``````````0`@`+:!'A```%1E<W0R
M+F-L=U!+`0(4`!0``@`(``1,IB2=XKD=8@,```$(```)``````````$`(`"V
M@6,2``!497-T,BYC<'!02P$"%``4``(`"``X6*8D1R*\)60$```C$0``"0``
M```````!`"``MH'L%0``5&5S=#(N9'-P4$L!`A0`%``"``@`!$RF)'+?3+W-
M````%0(```D``````````0`@`+:!=QH``%1E<W0R+F1S=U!+`0(4`!0``@`(
M``1,IB1,@(5!:P(``"D%```'``````````$`(`"V@6L;``!497-T,BYH4$L!
M`A0`%``"``@`3EBF))2U@J_U!0```+X```D``````````0`@`+:!^QT``%1E
M<W0R+F]P=%!+`0(4`!0``@`(`#%8IB0X2%/C_`$``.4#```)``````````$`
M(`"V@1<D``!497-T,BYP;&=02P$"%``4``(`"`!W5Z8D\OXA2C8&```G%P``
M"``````````!`"``MH$Z)@``5&5S=#(N<F-02P$"%``4``(`"``E6*8D53'U
M.\4+```C'P``#``````````!`"``MH&6+```5&5S=#)$;&<N8W!P4$L!`A0`
M%``"``@`-52F)+^%%A&M`@``@P4```H``````````0`@`+:!A3@``%1E<W0R
;1&QG+FA02P4&`````!0`%`!-!```6CL`````
`
end

0
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 10

Expert Comment

by:RONSLOW
ID: 1307760
Could you just put the source code here for others to read ??  I'd be interested to read it.  (even just the crucial routings that generate and load the resource would be nice.


0
 
LVL 1

Expert Comment

by:dkremer
ID: 1307761
He's the importand stuff... uudecode the previous comment for the whole project.

/*
** ***********************
** * CMyClass Definition *
** ***********************
*/

class CMyClass : public CObject
{
      DECLARE_SERIAL(CMyClass)

public:
      CMyClass();
      CMyClass(CString, CString, int);
      virtual ~CMyClass();

      void Serialize(CArchive &);

      CString GetFirstName() { return m_sFirstName; }
      CString GetLastName() { return m_sLastName; }
      int GetAge() { return m_nAge; }

protected:
      CString      m_sFirstName,            // First Name
            m_sLastName;            // Last Name
      int      m_nAge;                  // Age
};

/*
** *****************************
** * CMyClass - Implementation *
** *****************************
*/

/*
** MFC Serialization support
*/

IMPLEMENT_SERIAL(CMyClass, CObject, 1)

/*
** Constructors
*/

CMyClass::CMyClass() : m_nAge(0), CObject()
{
      // Strings have thier own constructors and need not be initialized
}

CMyClass::CMyClass(CString sFirstName, CString sLastName, int nAge) :
      m_sFirstName(sFirstName),
      m_sLastName(sLastName),
      m_nAge(nAge),
      CObject()
{
}

/*
** Destructor
*/

CMyClass::~CMyClass()
{
}

/*
** Serialization
*/

void CMyClass::Serialize(CArchive &ar)
{
      CObject::Serialize(ar); // Call our base class

      if(ar.IsLoading())
      {
            ar >> m_sFirstName >> m_sLastName >> m_nAge;
      }
      else
      {
            ar << m_sFirstName << m_sLastName << m_nAge;
      }
}

/*
** ************************
** * CMyList - Definition *
** ************************
*/

typedef CTypedPtrList<CObList, CMyClass *> CMyBaseList;

class CMyList : public CMyBaseList
{
public:
      CMyList();
      virtual ~CMyList();

protected:
      virtual void Kill();
};

/*
** ****************************
** * CMyList - Implementation *
** ****************************
*/

/*
** Constructor
*/

CMyList::CMyList() : CMyBaseList()
{
}

/*
** Destructor
*/

CMyList::~CMyList()
{
      Kill(); // Kill elements in the list
}

/*
** Kill List - kinda list RemoveAll, except it deletes the objects as well
*/

void CMyList::Kill()
{
      while(!IsEmpty())
            delete RemoveHead();
}

/*
** Ok, the main program is a dialog which has an OK, Cancel,
** Save Data and Load Data buttons on it, and an edit box
** to provide output. There are two functions called Report
** which takes a CString and shows it in the edit box, and a
** ReportError function which takes no parameters and that
** reports the error code returned by GetLastError().
** Here's the handlers for the buttons.
**
** Sorry about how it looks, but It doesn't fit in this small
** text box...
*/

/*
** OnSaveData will create a file names Test.tst in your current directory.
** You then import it to your resource by right clicking on your project resources
** in the resources pane.
*/

void CTest2Dlg::OnSaveData()
{
      CMyList list;
      BOOL bSuccess = TRUE;
      CMemFile *pMemFile = new CMemFile;
      CArchive *pArchive = NULL;
      long nLength = 0;

      list.AddTail(new CMyClass("John", "Doe", 120));
      list.AddTail(new CMyClass("Bill", "Gates", 666));
      list.AddTail(new CMyClass("Frank", "Black", 123));

      pArchive = new CArchive(pMemFile, CArchive::store); // Create a new CArchive based on the memory file
      list.Serialize(*pArchive); // Save the data
      pArchive->Flush(); // Flush it
      nLength = pMemFile->GetLength(); // Save the length
      pArchive->Close(); // Close the archive, but not the memory file
      pMemFile->SeekToBegin(); // Goto the beginning of the memory file
      
      // Copy the data in memory to the disk file.
      // The only reason this was first serialized to memory instead of disk is
      // to know the size of the file.
      TRY
      {
            CFile file("Test.tst", CFile::modeCreate | CFile::modeWrite);
            LPVOID lpData = new BYTE[nLength];
            long nVerifyLength = 0;

            file.Write(&nLength, sizeof(long)); // Write the length first
            nVerifyLength = pMemFile->Read(lpData, nLength); // Get a pointer to the data in the memory file
            ASSERT(nVerifyLength == nLength); // Should be equal
            file.Write(lpData, nLength); // Write the data itself
            file.Close(); // Close the file
            delete lpData; // Free the memory
      }
      CATCH_ALL(e)
      {
            Report("Unable to save sample data");
            e->Delete();
            bSuccess = FALSE;
      }
      END_CATCH_ALL

      pMemFile->Close(); // Close the memory file
      delete pMemFile; // Delete from heap
      
      if(bSuccess)
            Report("Sample data saved");
}

/*
** OnLoadData will load the the file saved to the resource and write the data to the
** edit box
*/

void CTest2Dlg::OnLoadData()
{
      CMyList list;
      BOOL bSuccess = FALSE;
      LPCTSTR lpszResName = MAKEINTRESOURCE(IDR_SAMPLERES);
      HINSTANCE m_hInst = AfxFindResourceHandle(lpszResName,RT_RCDATA);
      HRSRC hRes = ::FindResource(m_hInst, lpszResName, RT_RCDATA); // Locate the resource

      if(hRes) // Resource found ?
      {
            // Load the resouce
            HGLOBAL hGlb = ::LoadResource(NULL, hRes);

            if(hGlb) // Load successful ?
            {
                  BYTE *lpData = (BYTE *) ::LockResource(hGlb);

                  if(lpData) // Data available ?
                  {
                        long nLength = *((long *) lpData); // Get the data length
                        CMemFile *pMemFile = NULL;
                        CArchive *pArchive = NULL;

                        lpData += sizeof(long); // Move to the beginning of the data
                        TRY
                        {
                              pMemFile = new CMemFile(lpData, nLength);
                              pArchive = new CArchive(pMemFile, CArchive::load);

                              list.Serialize(*pArchive);

                              pArchive->Close();
                              pMemFile->Close();

                              bSuccess = TRUE;
                        }
                        CATCH_ALL(e)
                        {
                              Report("Unable to load data from resource");
                              e->Delete();
                        }
                        END_CATCH_ALL

                        // Delete objects from heap
                        delete pArchive;
                        delete pMemFile;
                  }
            }
      }

      if(bSuccess)
      {
            CString sLine;
                  
            // Fill list
            for(POSITION pl = list.GetHeadPosition() ; pl != NULL ;)
            {
                  CMyClass *pClass = list.GetNext(pl);
                  CString sAge;

                  // Build a report line
                  sLine += pClass->GetFirstName();
                  sLine += ", ";
                  sLine += pClass->GetLastName();
                  sLine += ", ";
                  sAge.Format("%ld", pClass->GetAge());
                  sLine += sAge;
                  sLine += char(13);
                  sLine += char(10);
            }

            // Dump it
            Report(sLine);
      }
      else
      {
            ReportError();
      }
}

0
 
LVL 1

Expert Comment

by:dkremer
ID: 1307762
Great, I see it removed all the tab characters... once again, sorry folks :)
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1307763
Convert your tabs to spaces before posting .. It's a pain when you copy and paste direct from DevStudio, as DevStudio replaces your spaces with tabs .. so you may need to put an extra step in to do the change (in Word perhaps or use a detab utilite).
0
 

Author Comment

by:pcasxd0
ID: 1307764
Thank you very much. Getting a sample, executing it and looking at the code helped a lot. Thanks.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Separate into files by filename 12 67
notReplace  challenge 53 102
sum67 challenge 35 89
unix example issues 18 49
This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now