Windows使用WxWidgets开发界面(c++)环境搭建

来源:互联网 发布:如何成功应聘淘宝客服 编辑:程序博客网 时间:2024/06/06 09:54

一直想学习wxWidgets,之前使用的都是wxPython,现在终于鼓起勇气学习这个了,发现原来是基于vc6.0开发的。所以最好的学习办法就是安装vistual studio 2010,方便学习看代码。wxWidgets里面也有demo。

基本上wxWidgets是和MFC类似的。

参考:http://www.codeproject.com/Articles/11515/Introduction-to-wxWidgets

Similarity to MFC

MFC and wxWidgets macros

MFC versionwxWidgets versionBEGIN_MESSAGE_MAPBEGIN_EVENT_TABLEEND_MESSAGE_MAPEND_EVENT_TABLEDECLARE_DYNAMICDECLARE_CLASSDECLARE_DYNCREATEDECLARE_DYMAMIC_CLASSIMPLEMENT_DYNAMICIMPLEMENT_CLASSIMPLEMENT_DYNCREATEIMPLEMENT_DYNAMIC_CLASSIsKindOf(RUNTIME_CLASS(CWindow))IsKindOf(CLASSINFO(wxWindow))

MFC and wxWidgets classes

Miscellaneous ClassesMFC versionwxWidgets versionCWinAppwxAppCObjectwxObjectCCmdTargetwxEvtHandlerCCommandLineInfowxCmdLineParserCMenuwxMenu, wMenuBar, wxMenuItemCWaitCursorwxBusyCursorCDataExchangewxValidatorWindow ClassesMFC versionwxWidgets versionCFrameWndwxFrameCMDIFrameWndwxMDIParentFrameCMDIChildWndwxMDIChildFrameCSplitterWndwxSplitterWindowCToolBarwxToolBarCStatusBarwxStatusBarCReBarwxCoolBar, but see contrib/src/fl and wxAUI, wxDockItCPropertyPagewxPanelCPropertySheetwxNotebook, wxPropertySheetDialogDialog ClassesMFC versionwxWidgets versionCDialogwxDialogCColorDialogwxColourDialogCFileDialogwxFileDialogCFindReplaceDialogwxFindReplaceDialogCFontDialogwxFontDialogCPageSetupDialogwxPageSetupDialogCPrintDialogwxPrintDialogControl ClassesMFC versionwxWidgets versionCAnimateCtrlwxMediaCtrl, wxAnimationCtrlCButtonwxButtonCBitmapButtonwxBitmapButtonCComboBoxwxComboBox, wxChoiceCDateTimeCtrlwxDatePickerCtrlCEditwxTextCtrlCHotKeyCtrlNone, but see KeybinderCListBoxCDragListBoxwxListBoxCCheckListBoxwxCheckListBoxCListCtrlwxListCtrl, wxListViewCMonthCalCtrlwxCalendarCtrlCProgressCtrlwxGaugeCReBarCtrlNone, but see contrib/src/fl and wxAUI, wxDockItCRichEditCtrlwxTextCtrlCScrollBarwxScrollBarCSliderCtrlwxSliderCSpinButtonCtrlwxSpinButton, wxSpinCtrlCStaticwxStaticText, wxStaticLine, wxStaticBox, wxStaticBitmapCStatusBarCtrlwxStatusBarCTabCtrlwxTabCtrlCToolBarCtrlwxToolBarCToolTipCtrlwxToolTipCTreeCtrlwxTreeCtrlGraphics ClassesMFC versionwxWidgets versionCBitmapwxBitmap, wxImage, wxIcon, wxCursorCBrushwxBrushCPenwxPenCFontwxFontCImageListwxImageList, wxIconBundleCPalettewxPaletteCRgnwxRegionCClientDCwxClientDCCMetaFileDCwxMetaFileDCCPaintDCwxPaintDCCWindowDCwxWindowDCCDCwxDC, wxMemoryDCData Structure ClassesMFC versionwxWidgets versionCArrayCObArrayCPtrArraywxArrayCStringArraywxArrayStringCDWordArrayCByteArrayCUIntArraywxArrayIntCListCPtrListCObListwxListCStringListwxArrayString, wxStringListCMapwxHashMapCStringwxStringCPointwxPointCRectwxRectCSizewxSizeCTimewxDateTimeCTimeSpanwxTimeSpan, wxDateSpanCOleVariantwxVariantInternet ClassesMFC versionwxWidgets versionCSocketwxSocketCFtpConnectionwxFTPCHttpConnectionwxHTTPDocument/View ClassesMFC versionwxWidgets versionCDocumentwxDocumentCViewwxViewCDocTemplateCSingleDocTemplateCMultiDocTemplatewxDocTemplateDrag and Drop ClassesMFC versionwxWidgets versionCOleDataSourcewxDataObjectCOleDropSourcewxDropSourceCOleDropTargetwxDropTargetFile ClassesMFC versionwxWidgets versionCFilewxFile, wxFFile, wxTextFileCMemFilewxMemoryInputStream, wxMemoryOutputStreamCSocketFilewxSocketInputStream, wxSocketOutputStreamCRecentFileListwxFileHistoryMultithreading ClassesMFC versionwxWidgets versionCWinThreadwxThreadCCriticalSectionwxCriticalSectionCMutexwxMutexCSemaphorewxSemaphore
非常经典的WxWidgets架构图。


1,下载

下载安装文件
http://sourceforge.net/projects/wxwindows/files/

安装文件:
wxWidgets-2.8.12(特别注意下不要使用开发版本,要使用稳定版本)

2,开发环境使用 visual studio 2010 



安装IDE参考:


http://blog.csdn.net/freewebsys/article/details/12028265


3,安装wxwdiget(基于源码编译安装)



下载zip文件
打开工程D:/wxWidgets-2.8.12/build/msw/wx.dsw

可以使用exe安装,(相当于解压缩源代码,不是安装)也可以使用zip解压缩,两个都是将源代码放到一个目录,没有啥区别。




然后编译,否则不能使用!!!!!!
wxWidgets使用的是vc6.0开发的,需要转换成vistual studio 2010。(IDE会自动转换的,耐心等待)


转换完成之后直接build就行了。


编译完成没有任何错误信息。说明安装成功。


4,编译demo



在安装后的wxWidgets-2.9.5/samples目录下面有samples.dsw
双击就可以启动visual studio了,同样需要转换成工程。


继续等待。转换完成之后就可以编译了。


里面的demo都可以编译成功,运行如下:


转换完成之后就可以进行编译了。发现编译有4个失败的。不过没有关系大多数成功了。

运行一个demo:



丰富的demo找了几个运行下效果如下:

一个简单的播放器

一个所有组件的demo。比较全。


5,WxWidgets的一个helloworld

[cpp] view plaincopyprint?
  1. /* 
  2.  * hworld.cpp 
  3.  * Hello world sample by Robert Roebling 
  4.  */  
  5.    
  6. #include "wx/wx.h"   
  7.    
  8.   
  9. class MyApp: public wxApp  
  10. {  
  11.     virtual bool OnInit();  
  12. };  
  13.   
  14.    
  15. class MyFrame: public wxFrame  
  16. {  
  17. public:  
  18.    
  19.     MyFrame(const wxString& title,   
  20.            const wxPoint& pos, const wxSize& size);  
  21.   
  22.     void OnQuit(wxCommandEvent& event);  
  23.     void OnAbout(wxCommandEvent& event);  
  24.    
  25.     DECLARE_EVENT_TABLE()  
  26. };  
  27.   
  28. enum  
  29. {  
  30.     ID_Quit = 1,  
  31.     ID_About,  
  32.   
  33. };  
  34.    
  35. BEGIN_EVENT_TABLE(MyFrame, wxFrame)  
  36.     EVT_MENU(ID_Quit, MyFrame::OnQuit)  
  37.     EVT_MENU(ID_About, MyFrame::OnAbout)  
  38. END_EVENT_TABLE()  
  39.    
  40. IMPLEMENT_APP(MyApp)  
  41.   
  42. bool MyApp::OnInit()  
  43. {  
  44.     MyFrame *frame = new MyFrame( "Hello World",   
  45.          wxPoint(50,50), wxSize(450,340) );  
  46.     frame->Show(TRUE);  
  47.     SetTopWindow(frame);  
  48.     return TRUE;  
  49. }   
  50.    
  51. MyFrame::MyFrame(const wxString& title,   
  52.        const wxPoint& pos, const wxSize& size)  
  53. : wxFrame((wxFrame *)NULL, -1, title, pos, size)  
  54. {  
  55.     wxMenu *menuFile = new wxMenu;  
  56.     menuFile->Append( ID_About, "&About..." );  
  57.     menuFile->AppendSeparator();  
  58.     menuFile->Append( ID_Quit, "E&xit" );  
  59.    
  60.     wxMenuBar *menuBar = new wxMenuBar;  
  61.     menuBar->Append( menuFile, "&File" );  
  62.    
  63.     SetMenuBar( menuBar );  
  64.   
  65.     CreateStatusBar();  
  66.     SetStatusText( "Welcome to wxWindows!" );  
  67. }  
  68.   
  69.    
  70. void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))  
  71. {  
  72.     Close(TRUE);  
  73. }  
  74.    
  75. void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))  
  76. {  
  77.   
  78.     wxMessageBox("This is a wxWindows Hello world sample",  
  79.         "About Hello World", wxOK | wxICON_INFORMATION, this);  
  80. }  


其他的继续研究。。。

其他参考:

http://www.cnzui.com/archives/962

http://blog.csdn.net/chinabinlang/article/details/6904143
http://www.codeproject.com/Articles/11515/Introduction-to-wxWidgets

原创粉丝点击