'C++'에 해당되는 글 15건

  1. 2008.07.15 sqlite3 wxList 이용.
  2. 2008.07.11 wxList examples.
  3. 2008.06.27 wxList study...
  4. 2008.06.27 sqlite3 simple examples
  5. 2008.06.27 Dev-C++ wxWidgets examples draw image
sqlite3와 wxWidgets 를 이용해서 아래와 같이 만들어 보았다.

StekiDB.h                                                              


#ifndef __STEKIDB_h__
#define __STEKIDB_h__

#include <wx/msgdlg.h>
#include <wx/string.h>
#include <wx/list.h>
#include <sqlite3.h>

class StekiDBConnection
{
private:
        wxString dbName;     
       
public:
    sqlite3 *db;

    StekiDBConnection(const wxString &dbName);
    virtual ~StekiDBConnection();
    void close();
};

class StekiDBResultSet : public wxList
{
public:
    StekiDBResultSet();
    ~StekiDBResultSet();
};

class StekiDBStatement
{
private:
    StekiDBConnection *conn;
public:
    StekiDBStatement(StekiDBConnection *conn);
    virtual ~StekiDBStatement();
    StekiDBResultSet * executeQuery( const wxString &sql );
};

class StekiDBValue : public wxObject
{
public:
    wxString *value;
    wxString *colName;
public:
    StekiDBValue(wxString *colName, wxString *value){ this->colName=colName; this->value=value; }
    virtual ~StekiDBValue(){ free(value); free(colName); }
};


#endif


StekiDB.cpp                                                                  

#include "StekiDB.h"

/**
**  StekiDBConnection
**
**/

StekiDBConnection::StekiDBConnection(const wxString &dbName){
    this->dbName=dbName;
   
    char *zErrMsg = 0;
    int rc;
   
    rc = sqlite3_open(dbName, &db);
    if( rc )
    {
        wxMessageBox(wxT("Can't open database: ") + wxString(sqlite3_errmsg(db)));
    }
}

StekiDBConnection::~StekiDBConnection(){
    close();
}

void StekiDBConnection::close(){
    if(db!=NULL) sqlite3_close(db);
}

/**
**  callback_resultset
**
**/

static int callback_resultset(void *pArg, int argc, char **argv, char **azColName)
{
    StekiDBResultSet *rset=(StekiDBResultSet *)pArg;

    wxList *list=new wxList();
    int i;
    for(i=0; i<argc; i++)
    {
        //printf("%s=%s, ", azColName[i], argv[i] ? argv[i] : "NULL");
        wxString *colName = new wxString( azColName[i] );
        wxString *str = new wxString( argv[i] ? argv[i] : "NULL" );
        StekiDBValue *value = new StekiDBValue( colName, str );
        list->Append( value  );
    }
    rset->Append( list );

    return 0;
}

/**
**  StekiDBResultSet
**
**/
StekiDBResultSet::StekiDBResultSet(){
}

StekiDBResultSet::~StekiDBResultSet(){
    this->DeleteContents(true);
}

/**
**  StekiDBStatement
**
**/

StekiDBStatement::StekiDBStatement(StekiDBConnection *conn){
    this->conn=conn;
}

/**
** StekiDBStatement
**
**/
StekiDBStatement::~StekiDBStatement(){
}

StekiDBResultSet * StekiDBStatement::executeQuery( const wxString &sql ){
    char *zErrMsg = 0;
   
    StekiDBResultSet *rset = new StekiDBResultSet();

    int rc = sqlite3_exec(conn->db, sql.c_str(), callback_resultset, rset, &zErrMsg);
    if( rc!=SQLITE_OK )
    {
        wxMessageBox(wxT("SQL error: ") + wxString(zErrMsg));
    }

    return rset;
}



Example.cpp                                                                   

void MyFrame::OnMyDBReadBtn(wxCommandEvent&)
{
    StekiDBConnection *conn = new StekiDBConnection("steki.db");
    StekiDBStatement *stmt = new StekiDBStatement(conn);   
    StekiDBResultSet *rset = stmt->executeQuery( "select * from x" );

    for ( wxList::Node *node = rset->GetFirst(); node; node = node->GetNext() ){
        wxList *rsetlist = (wxList *)node->GetData();
      
        for ( wxList::Node *node2=rsetlist->GetFirst();node2;node2=node2->GetNext() )
       {
            StekiDBValue *value = (StekiDBValue *)node2->GetData();
          
            wtc->AppendText( *value->value );
            wtc->AppendText( "," );
        }  
        wtc->AppendText("\n");
    }

    free (rset);
    free (stmt);
    free (conn);
}
Posted by stekilove
,

wxList examples.

wxWidgets 2.6.1


colltest2.cpp                                                       

///////////////////////////////////////////////////////////////////////////////
// Name:        CollectionTest
// Purpose:     excercise wxList and wxString
// Author:      PyoungGwan Chun
// Modified by:
// Created:     27/06/2008
// RCS-ID:      $Id: colltest.h,v 1.000 2008/06/27 14:57:09 MBN Exp $
// Copyright:   (c) 2008 PyoungGwan Chun <stekilove@gmail.com>
// Licence:     GNU licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _COLLECTIONTEST2H__
#define _COLLECTIONTEST2H__

#include <wx/string.h>
#include <wx/list.h>


class MyExListElement : public wxObject {
private:
    int b;
public:
    MyExListElement(int a) { b=a; }
    virtual ~MyExListElement(){}
    int get() { return b; }
};


class CollectionTest2 {
private:
         wxList list;

public:      
      CollectionTest2(){}
      virtual ~CollectionTest2(){
              list.DeleteContents(true);
      }
        
      wxString *doIt();
};      

#endif



colltest2.h                                                                         

#include "colltest2.h"

wxString *CollectionTest2::doIt(){
    MyExListElement *element = new MyExListElement(10);
    list.Append(element);
   
    wxString s;
    wxString *str = new wxString("");
    str->Append("BEGIN").Append("\n");
   
    for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() ){
        MyExListElement *current = (MyExListElement *)node->GetData();
       
        s.sprintf("%d",current->get());
        str->Append( s ).Append("\n");
    }
   
    str->Append("END");
    return str;
}

Posted by stekilove
,
///////////////////////////////////////////////////////////////////////////////
// Name:        CollectionTest
// Purpose:     excercise wxList and wxString
// Author:      PyoungGwan Chun
// Modified by:
// Created:     27/06/2008
// RCS-ID:      $Id: colltest.h,v 1.000 2008/06/27 14:57:09 MBN Exp $
// Copyright:   (c) 2008 PyoungGwan Chun <stekilove@gmail.com>
// Licence:     GNU licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _COLLECTIONTESTH__
#define _COLLECTIONTESTH__

#include <wx/string.h>
#include <wx/list.h>

class MyListElement {
private:
    int b;
public:
    MyListElement(int a) { b=a; }
    int get() { return b; }
};

WX_DECLARE_LIST(MyListElement, MyList);


#include <wx/listimpl.cpp>
WX_DEFINE_LIST(MyList);

class CollectionTest {
private:
         MyList list;

public:      
      CollectionTest(){}
      virtual ~CollectionTest(){
              list.DeleteContents(true);
      }
        
      wxString *doIt(){
            MyListElement *element = new MyListElement(10);
            list.Append(element);
            
            wxString s;
            wxString *str = new wxString("");
            str->Append("BEGIN").Append("\n");
            
            for ( MyList::Node *node = list.GetFirst(); node; node = node->GetNext() ){
                MyListElement *current = node->GetData();
                
                s.sprintf("%d",current->get());
                str->Append( s ).Append("\n");
            }
            
            str->Append("END");
            return str;
        }
};      


#endif

Posted by stekilove
,
#include <sqlite3.h>

class prjWxEx01Frm : public wxFrame
private:
    sqlite3 *db;

...
...
...


//----------------------------------------------------------------------------
// prjWxEx01Frm
//----------------------------------------------------------------------------
//Add Custom Events only in the appropriate block.
//Code added in other places will be removed by wxDev-C++
////Event Table Start
BEGIN_EVENT_TABLE(prjWxEx01Frm,wxFrame)
    ////Manual Code Start
    ////Manual Code End
    
    EVT_CLOSE(prjWxEx01Frm::OnClose)
    EVT_ACTIVATE(prjWxEx01Frm::prjWxEx01FrmActivate)
    EVT_BUTTON(ID_WXBTNNEXT,prjWxEx01Frm::WxBtnNextClick)


END_EVENT_TABLE()
////Event Table End


void prjWxEx01Frm::OnClose(wxCloseEvent& event)
{
    sqlite3_close(db);
    Destroy();
}

/*
 * prjWxEx01FrmActivate
 */
void prjWxEx01Frm::prjWxEx01FrmActivate(wxActivateEvent& event)
{
    dbFileName=wxString( "D:/hobby_cpp/x4_sqlite/test.db" );
    int rc = sqlite3_open(dbFileName, &db);
    if( rc )
    {
        wxString str( sqlite3_errmsg(db) );
        wxMessageBox(wxT("Can't open database: ") + str);

        sqlite3_close(db);
    }
}

static int callback(void *pArg, int argc, char **argv, char **azColName){
    StekiResultSet *rset=(StekiResultSet *)pArg;
    
    wxString info;
    for(int i=0;i <argc;i++)
    {
       info.Append(wxString(azColName[i])+wxT("=")+wxT(argv[i])+wxT("\t"));
    }
    rset->add( info );
    
    // return 0 or else the sqlexec will be aborted.
    return 0;
}

/*
 * WxBtnNextClick
 */
void prjWxEx01Frm::WxBtnNextClick(wxCommandEvent& event)
{
    WxMemoMean->SetValue(_T(""));
    
    StekiResultSet *resultSet = new StekiResultSet();
    
    char *zErrMsg = 0;
    wxString strSql("select * from x;");
    int rc = sqlite3_exec( db, strSql, callback, (void *)resultSet, &zErrMsg);
    if( rc!=SQLITE_OK ){
        wxString strErrMsg( zErrMsg );
        wxMessageBox(wxT("SQL error: ") + strErrMsg);
        return;
    }

    appendText( *resultSet->toString() );
    free( resultSet );
    
}

Posted by stekilove
,
#if defined(__WXMSW__)
    #ifdef wxHAVE_RAW_BITMAP
    #include "wx/rawbmp.h"
    #endif
#endif

#if defined(__WXMAC__) || defined(__WXGTK__)
    #define wxHAVE_RAW_BITMAP
    #include "wx/rawbmp.h"
#endif



////Event Table Start
BEGIN_EVENT_TABLE(prjWxEx01Frm,wxFrame)
    ////Manual Code Start
    ////Manual Code End
    
    EVT_PAINT(prjWxEx01Frm::OnPaint)

END_EVENT_TABLE()
////Event Table End


bool MainApp::OnInit()
{
    wxInitAllImageHandlers();
}

void prjWxEx01Frm::drawImage(wxDC* dc)
{
    dc->SetBrush( wxBrush( wxT("orange"), wxSOLID ) );
    dc->SetPen( *wxBLACK_PEN );
    dc->DrawRectangle( 5, 30, 110, 100 );
    
    if(m_bitmap.Ok())
    {
        wxRect rect;
        rect.SetWidth(m_bitmap.GetWidth());
        rect.SetHeight(m_bitmap.GetHeight());

        dc->DrawBitmap(m_bitmap.GetSubBitmap(rect), 10, 35, -1);
    }
}


/*
 * WxBtnNextClick
 */
void prjWxEx01Frm::WxBtnNextClick(wxCommandEvent& event)
{

    //===============
    wxDir wdir(wxGetCwd());

    wxString dir;
    if ( wxFile::Exists(wxT("./Images/crouch.jpg")) ){
        dir = wxT("./Images/");
    }
    else if ( wxFile::Exists(wxT("../../Images/crouch.jpg")) ){
        dir = wxT("../../Images/");
    }

    wxImage image( dir + _T("crouch.jpg" ), wxBITMAP_TYPE_JPEG);
    m_bitmap = wxBitmap( image );
    image.Destroy();


    wxClientDC* clientDC = new wxClientDC(this);
    drawImage(clientDC);
    if (clientDC) delete clientDC;
}


void prjWxEx01Frm::OnPaint(wxPaintEvent& WXUNUSED(event))
{
    wxPaintDC dc( this );
    PrepareDC( dc );
    
    drawImage(&dc);

}
Posted by stekilove
,