习惯了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); }