wxWidgets 窗口程序的标准main框架

习惯了C/C++主入口main,在WX里没有它总是觉得好象少了点什么,这两天花了点时间弄了弄,原来是这样:

main.cpp:

#include <wx/wx.h>
#include "client.h"

int main(int argc,char* argv[])
{
    MyApp* app=new MyApp();
    wxApp::SetInstance(app);


    return wxEntry(argc,argv);
}

client.h:

#include <wx/wx.h>

class MyFrame : public wxFrame
{
public:
    MyFrame() ;
};

class MyApp: public wxApp
{
    wxFrame* m_frame;
public:

    bool OnInit();
};

 

client.cpp:

 

#include <wx/wx.h>
#include "client.h"

MyFrame:: MyFrame() 
   : wxFrame(NULL, wxID_ANY, wxT("Hello wxWidgets"), wxPoint(50,50), wxSize(800,600)) 
{          
    wxPanel* mainPane = new wxPanel(this);          
    wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);         
     // add widgets here! 
    mainPane->SetSizer(sizer); 
} 

bool MyApp::OnInit() 
{         
    m_frame = new MyFrame();         
    m_frame->Show();         
    return true;
}
 

 现在果然清晰多了,哇哈哈~~

 Windows/*nix 下用GCC/MinGW 编译器时上面的int main(int argc,char* argv[])是能够完全正确编译,带SUBSYSTEM/Windows:5参数编译的可执行文件是不带命令行窗口(我是在WINDOW 7下用C::B+MINGW+WX2.9.2测试的)。但是如果用VC++编译器编译则有两种情况出现:

1.带SUBSYSTEM/console 参数能正确编译,但窗口程序运行时有命令行窗口;

2.带SUBSYSTEM/Windows:5 则不能编译,在这种情况下需要用到伟大的WinMain做为主程序入口点,同时wxEntry也要相应地改为适用WinMain参数的版本。下面是唯一需要改动的地方:

#include <wx/wx.h>
#include "client.h"

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSCTR lpCmdLine,int nCmdShow) 
{
    MyApp* app=new MyApp();
    wxApp::SetInstance(app);


    return wxEntry(hInstance,hPrevInstance,lpCmdLine,nCmdShow);
}

 

posted @ 2010-12-24 12:23  高斯山  阅读(2036)  评论(1编辑  收藏  举报