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);
}

浙公网安备 33010602011771号