一直想学习wxWidgets,之前使用的都是wxPython,现在终于鼓起勇气学习这个了,发现原来是基于vc6.0开发的。所以最好的学习办法就是安装vistual studio 2010,方便学习看代码。wxWidgets里面也有demo。
基本上wxWidgets是和MFC类似的。
参考:
Similarity to MFC
MFC and wxWidgets macros
MFC version | wxWidgets version |
---|---|
BEGIN_MESSAGE_MAP | BEGIN_EVENT_TABLE |
END_MESSAGE_MAP | END_EVENT_TABLE |
DECLARE_DYNAMIC | DECLARE_CLASS |
DECLARE_DYNCREATE | DECLARE_DYMAMIC_CLASS |
IMPLEMENT_DYNAMIC | IMPLEMENT_CLASS |
IMPLEMENT_DYNCREATE | IMPLEMENT_DYNAMIC_CLASS |
IsKindOf (RUNTIME_CLASS (CWindow)) | IsKindOf (CLASSINFO(wxWindow)) |
MFC and wxWidgets classes
Miscellaneous Classes | |
MFC version | wxWidgets version |
---|---|
CWinApp | |
CObject | |
CCmdTarget | |
CCommandLineInfo | |
CMenu | , , |
CWaitCursor | |
CDataExchange | |
Window Classes | |
MFC version | wxWidgets version |
CFrameWnd | |
CMDIFrameWnd | |
CMDIChildWnd | |
CSplitterWnd | |
CToolBar | |
CStatusBar | |
CReBar | , but see contrib/src/fl and , |
CPropertyPage | |
CPropertySheet | , |
Dialog Classes | |
MFC version | wxWidgets version |
CDialog | |
CColorDialog | |
CFileDialog | |
CFindReplaceDialog | |
CFontDialog | |
CPageSetupDialog | |
CPrintDialog | |
Control Classes | |
MFC version | wxWidgets version |
CAnimateCtrl | , wxAnimationCtrl |
CButton | |
CBitmapButton | |
CComboBox | , |
CDateTimeCtrl | |
CEdit | |
CHotKeyCtrl | None, but see Keybinder |
CListBox , CDragListBox | |
CCheckListBox | |
CListCtrl | , |
CMonthCalCtrl | |
CProgressCtrl | |
CReBarCtrl | None, but see contrib/src/fl and , |
CRichEditCtrl | |
CScrollBar | |
CSliderCtrl | |
CSpinButtonCtrl | , |
CStatic | , , , |
CStatusBarCtrl | |
CTabCtrl | |
CToolBarCtrl | |
CToolTipCtrl | |
CTreeCtrl | |
Graphics Classes | |
MFC version | wxWidgets version |
CBitmap | , , , |
CBrush | |
CPen | |
CFont | |
CImageList | , |
CPalette | |
CRgn | |
CClientDC | |
CMetaFileDC | |
CPaintDC | |
CWindowDC | |
CDC | , |
Data Structure Classes | |
MFC version | wxWidgets version |
CArray , CObArray , CPtrArray | |
CStringArray | |
CDWordArray , CByteArray , CUIntArray | |
CList , CPtrList , CObList | |
CStringList | , |
CMap | |
CString | |
CPoint | |
CRect | |
CSize | |
CTime | |
CTimeSpan | , |
COleVariant | |
Internet Classes | |
MFC version | wxWidgets version |
CSocket | |
CFtpConnection | |
CHttpConnection | |
Document/View Classes | |
MFC version | wxWidgets version |
CDocument | |
CView | |
CDocTemplate , CSingleDocTemplate , CMultiDocTemplate | |
Drag and Drop Classes | |
MFC version | wxWidgets version |
COleDataSource | |
COleDropSource | |
COleDropTarget | |
File Classes | |
MFC version | wxWidgets version |
CFile | , , |
CMemFile | , |
CSocketFile | , |
CRecentFileList | |
Multithreading Classes | |
MFC version | wxWidgets version |
CWinThread | |
CCriticalSection | |
CMutex | |
CSemaphore |
非常经典的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
/* * hworld.cpp * Hello world sample by Robert Roebling */ #include "wx/wx.h" class MyApp: public wxApp{ virtual bool OnInit();}; class MyFrame: public wxFrame{public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); DECLARE_EVENT_TABLE()};enum{ ID_Quit = 1, ID_About,}; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout)END_EVENT_TABLE() IMPLEMENT_APP(MyApp)bool MyApp::OnInit(){ MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) ); frame->Show(TRUE); SetTopWindow(frame); return TRUE;} MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame((wxFrame *)NULL, -1, title, pos, size){ wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, "&About..." ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, "E&xit" ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, "&File" ); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText( "Welcome to wxWindows!" );} void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)){ Close(TRUE);} void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){ wxMessageBox("This is a wxWindows Hello world sample", "About Hello World", wxOK | wxICON_INFORMATION, this);}
其他的继续研究。。。
其他参考:
http://www.cnzui.com/archives/962
http://blog.csdn.net/chinabinlang/article/details/6904143 http://www.codeproject.com/Articles/11515/Introduction-to-wxWidgets