Click here to Skip to main content
15,884,099 members
Articles / Desktop Programming / MFC
Article

CodeWizard--A visual tool to automatically generate C++ code files!

Rate me:
Please Sign up or sign in to vote.
2.36/5 (14 votes)
23 Oct 20032 min read 44.2K   1.3K   24   2
CodeWizard includes a tool that lets you visually create functionality on-screen and automatically generate C++ code files!

Introduction

CodeWizard Version 1.0 includes a series of tools that lets you visually create functionality on-screen and automatically generate C++ code files! Currently it only includes a tool that can generate source code from CObject class, but this is not the end. I will add many new code wizards that will help you generate source code from ODBC API, MFC ODBC or other classes. To make you know how it works, all the source code is included within the zip files, you can modify it freely. If you have any good ideas about this tool, please let me know.

Below is the CObject code generator:

Image 1

To use the code generator

  1. Select "Main Tools|&1 Generate Source Code based on CObject..." menu item, a setting dialog will appear.
  2. Enter a correct class name at the first edit box, then you can enter the author name and the description of this class.
  3. Click "Add" button to add as many variables as you want, all the variables will be listed within the list box.
  4. Double click on the select item of the list box, an edit dialog box will appear. You can now enter the new basic variable name. (Tip: Only the basic name of the variable name is needed, for example: if the basic name is Text, it should be converted to m_strText, ID_PROPERTY_TEXT, GetText and SetText by system, and you can't enter any empty char within the name.) Currently it only support the following types:
    enum FO_VALUETYPE
    {
    V_EMPTY = -1,
    V_BOOL, // BOOL value type.
    V_STRING, // String value type
    V_INT, // int value type
    V_FLOAT, // float value type
    V_DOUBLE, // double value type
    V_DWORD, // DWORD value type
    V_DATETIME, // COleDateTime value type
    V_COLOR // COLORREF value type.
    };
  5. Click the "Gen Code" button to generate the source file and header file.

Below is the details of the source code header file:

#if !defined(FO_MYOBJECT_H__8F58549C_BAD3_4FE7_AE14_8C07BCD16A98__INCLUDED_)
#define UFC_MYOBJECT_H__8F58549C_BAD3_4FE7_AE14_8C07BCD16A98__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//------------------------------------------------------
// Description
// Author: Author name.
//------------------------------------------------------

#include "FO_VALUE.h"

/////////////////////////////////////////////////////////////
// Property IDs define.

#define ID_PROP_TITLE                              7000
#define ID_PROP_NUMBER                             7001
#define ID_PROP_MATH                               7002
#define ID_PROP_GEO                                7003
#define ID_PROP_UNDER60                            7004
#define ID_PROP_MEMO                               7005
#define ID_PROP_STARTTIME                          7006

class CMyObject : public CObject
{
    DECLARE_SERIAL(CMyObject)

// Construction/Destruction
public:

    // Constructor with ID.
    CMyObject();

    // Copy constructor. 
    CMyObject(const CMyObject& newObject);

    // Destructor. 
    virtual ~CMyObject();

    // Put value.
    virtual BOOL PutValue(const int &nPropId,const FO_VALUE &Value);

    // Get value.
    virtual BOOL GetValue(FO_VALUE &Value,const int &nPropId);

    // Create a copy of current object.
    virtual CObject* Copy();

public:

    // Return Title value.
    CString GetTitle() const { return m_strTitle;}

    // Change Title value.
    void SetTitle( const CString &strValue ) {m_strTitle = strValue; }

    // Return Number value.
    int GetNumber() const { return m_nNumber;}

    // Change Number value.
    void SetNumber( const int &nValue ) {m_nNumber = nValue; }

    // Return Math value.
    float GetMath() const { return m_fMath;}

    // Change Math value.
    void SetMath( const float &fValue ) {m_fMath = fValue; }

    // Return Geo value.
    float GetGeo() const { return m_fGeo;}

    // Change Geo value.
    void SetGeo( const float &fValue ) {m_fGeo = fValue; }

    // Return Under60 value.
    BOOL GetUnder60() const { return m_bUnder60;}

    // Change Under60 value.
    void SetUnder60( const BOOL &bValue ) {m_bUnder60 = bValue; }

    // Return Memo value.
    CString GetMemo() const { return m_strMemo;}

    // Change Memo value.
    void SetMemo( const CString &strValue ) {m_strMemo = strValue; }

    // Return StartTime value.
    COleDateTime GetStartTime() const { return m_dtStartTime;}

    // Change StartTime value.
    void SetStartTime( const COleDateTime &dtValue ) 
        {m_dtStartTime = dtValue; }

// Attributes
protected:
    // FODO:Add your properties items below.
    // Title value.
    CString                           m_strTitle;

    // Number value.
    int                               m_nNumber;

    // Math value.
    float                             m_fMath;

    // Geo value.
    float                             m_fGeo;

    // Under60 value.
    BOOL                              m_bUnder60;

    // Memo value.
    CString                           m_strMemo;

    // StartTime value.
    COleDateTime                      m_dtStartTime;


public:

    // Sets this set of font properties equal to another. 
    CMyObject& operator=(const CMyObject& newObject);

    // Is equal.
    virtual BOOL IsEqual(CObject* prop);

    // Determines if another set of fill properties is equal to this one. 
    BOOL operator==(const CMyObject newObject) const;

    // Serialize data to file. 
    virtual void Serialize(CArchive& ar);

// Implementation
public:

#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endif

};

inline CObject* CMyObject::Copy()
{
    return new CMyObject(*this);
}


#endif 
// !defined(UFC_MYOBJECT_H__8F58549C_BAD3_4FE7_AE14_8C07BCD16A98__INCLUDED_)

Below is the source code of the source code file:

// MyObject.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "MyObject.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyObject construction/destruction

IMPLEMENT_SERIAL(CMyObject, CObject,1)

// CMyObject | CMyObject | Constructor.

CMyObject::CMyObject() : CObject()
{
    m_strTitle                        = _T("");
    m_nNumber                         = 0;
    m_fMath                           = 0.0f;
    m_fGeo                            = 0.0f;
    m_bUnder60                        = TRUE;
    m_strMemo                         = _T("");
    m_dtStartTime                     = COleDateTime::GetCurrentTime();
}

CMyObject::CMyObject(const CMyObject& newObject) 
{
    m_strTitle                        = newObject.m_strTitle;
    m_nNumber                         = newObject.m_nNumber;
    m_fMath                           = newObject.m_fMath;
    m_fGeo                            = newObject.m_fGeo;
    m_bUnder60                        = newObject.m_bUnder60;
    m_strMemo                         = newObject.m_strMemo;
    m_dtStartTime                     = newObject.m_dtStartTime;
}

// Destructor.
CMyObject::~CMyObject()
{
}

//The property to copy.
CMyObject& CMyObject::operator=(const CMyObject& newObject)
{
    m_strTitle                        = newObject.m_strTitle;
    m_nNumber                         = newObject.m_nNumber;
    m_fMath                           = newObject.m_fMath;
    m_fGeo                            = newObject.m_fGeo;
    m_bUnder60                        = newObject.m_bUnder60;
    m_strMemo                         = newObject.m_strMemo;
    m_dtStartTime                     = newObject.m_dtStartTime;

    return *this;
}

BOOL CMyObject::IsEqual(CObject* prop)
{
    CMyObject* pProp = (CMyObject*)prop;

    if (pProp)
        return (*this == *pProp);

    return FALSE;
}

BOOL CMyObject::operator==(const CMyObject newObject) const
{
    if(
    GetTitle()                        == newObject.GetTitle() && 
    GetNumber()                       == newObject.GetNumber() && 
    GetMath()                         == newObject.GetMath() && 
    GetGeo()                          == newObject.GetGeo() && 
    GetUnder60()                      == newObject.GetUnder60() && 
    GetMemo()                         == newObject.GetMemo() && 
    GetStartTime()                    == newObject.GetStartTime() )
    {
        return TRUE;
    }
    return FALSE;
}

////////////////////////////////////////////////////////////////////////////
// CMyObject serialization
void CMyObject::Serialize(CArchive& ar)
{
    CObject::Serialize(ar);

    if (ar.IsStoring())
    {
        ar << m_strTitle;
        ar << m_nNumber;
        ar << m_fMath;
        ar << m_fGeo;
        ar << m_bUnder60;
        ar << m_strMemo;
        ar << m_dtStartTime;

    }
    else
    {
        ar >> m_strTitle;
        ar >> m_nNumber;
        ar >> m_fMath;
        ar >> m_fGeo;
        ar >> m_bUnder60;
        ar >> m_strMemo;
        ar >> m_dtStartTime;

    }
}


/////////////////////////////////////////////////////////////////////////////
// CMyObject diagnostics

#ifdef _DEBUG
void CMyObject::AssertValid() const
{
    CObject::AssertValid();
}

void CMyObject::Dump(CDumpContext& dc) const
{
    CObject::Dump(dc);
}
#endif //_DEBUG

BOOL CMyObject::PutValue(const int &nPropId,const FO_VALUE &value)
{
    BOOL bReturn = TRUE;
    switch(nPropId)
    {
    case ID_PROP_TITLE:
        {
            SetTitle(value.m_strValue);
        }
        break;

    case ID_PROP_NUMBER:
        {
            SetNumber(value.m_nValue);
        }
        break;

    case ID_PROP_MATH:
        {
            SetMath(value.m_fValue);
        }
        break;

    case ID_PROP_GEO:
        {
            SetGeo(value.m_fValue);
        }
        break;

    case ID_PROP_UNDER60:
        {
            SetUnder60(value.m_bValue);
        }
        break;

    case ID_PROP_MEMO:
        {
            SetMemo(value.m_strValue);
        }
        break;

    case ID_PROP_STARTTIME:
        {
            SetStartTime(value.m_dtValue);
        }
        break;

    default:
        {
            bReturn = FALSE;
        }
        break;
        
    }

    return bReturn;
}

BOOL CMyObject::GetValue(FO_VALUE &value,const int &nPropId)
{
    BOOL bReturn = TRUE;
    switch(nPropId)
    {
    case ID_PROP_TITLE:
        {
            value.m_nValueType = V_STRING;
            value.m_strValue = GetTitle();
        }
        break;

    case ID_PROP_NUMBER:
        {
            value.m_nValueType = V_INT;
            value.m_nValue = GetNumber();
        }
        break;

    case ID_PROP_MATH:
        {
            value.m_nValueType = V_FLOAT;
            value.m_fValue = GetMath();
        }
        break;

    case ID_PROP_GEO:
        {
            value.m_nValueType = V_FLOAT;
            value.m_fValue = GetGeo();
        }
        break;

    case ID_PROP_UNDER60:
        {
            value.m_nValueType = V_BOOL;
            value.m_bValue = GetUnder60();
        }
        break;

    case ID_PROP_MEMO:
        {
            value.m_nValueType = V_STRING;
            value.m_strValue = GetMemo();
        }
        break;

    case ID_PROP_STARTTIME:
        {
            value.m_nValueType = V_DATETIME;
            value.m_dtValue = GetStartTime();
        }
        break;

    default:
        {
            bReturn = FALSE;
        }
        break;
        
    }

    return bReturn;
}

That's all. All the source code of this tool is included within the zip files.

To find the latest version of this tool, click here!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
China China
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralCan't get code to work Pin
rromerot11-Nov-04 2:10
rromerot11-Nov-04 2:10 
GeneralRe: The idea itself is interesting Pin
ucc80126-Oct-03 3:05
ucc80126-Oct-03 3:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.