一直想学习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 | wxApp |
CObject | wxObject |
CCmdTarget | wxEvtHandler |
CCommandLineInfo | wxCmdLineParser |
CMenu | wxMenu, wMenuBar, wxMenuItem |
CWaitCursor | wxBusyCursor |
CDataExchange | wxValidator |
Window Classes | |
MFC version | wxWidgets version |
CFrameWnd | wxFrame |
CMDIFrameWnd | wxMDIParentFrame |
CMDIChildWnd | wxMDIChildFrame |
CSplitterWnd | wxSplitterWindow |
CToolBar | wxToolBar |
CStatusBar | wxStatusBar |
CReBar | wxCoolBar, but see contrib/src/fl and wxAUI, wxDockIt |
CPropertyPage | wxPanel |
CPropertySheet | wxNotebook, wxPropertySheetDialog |
Dialog Classes | |
MFC version | wxWidgets version |
CDialog | wxDialog |
CColorDialog | wxColourDialog |
CFileDialog | wxFileDialog |
CFindReplaceDialog | wxFindReplaceDialog |
CFontDialog | wxFontDialog |
CPageSetupDialog | wxPageSetupDialog |
CPrintDialog | wxPrintDialog |
Control Classes | |
MFC version | wxWidgets version |
CAnimateCtrl | wxMediaCtrl, wxAnimationCtrl |
CButton | wxButton |
CBitmapButton | wxBitmapButton |
CComboBox | wxComboBox, wxChoice |
CDateTimeCtrl | wxDatePickerCtrl |
CEdit | wxTextCtrl |
CHotKeyCtrl | None, but see Keybinder |
CListBox , CDragListBox | wxListBox |
CCheckListBox | wxCheckListBox |
CListCtrl | wxListCtrl, wxListView |
CMonthCalCtrl | wxCalendarCtrl |
CProgressCtrl | wxGauge |
CReBarCtrl | None, but see contrib/src/fl and wxAUI, wxDockIt |
CRichEditCtrl | wxTextCtrl |
CScrollBar | wxScrollBar |
CSliderCtrl | wxSlider |
CSpinButtonCtrl | wxSpinButton, wxSpinCtrl |
CStatic | wxStaticText, wxStaticLine, wxStaticBox, wxStaticBitmap |
CStatusBarCtrl | wxStatusBar |
CTabCtrl | wxTabCtrl |
CToolBarCtrl | wxToolBar |
CToolTipCtrl | wxToolTip |
CTreeCtrl | wxTreeCtrl |
Graphics Classes | |
MFC version | wxWidgets version |
CBitmap | wxBitmap, wxImage, wxIcon, wxCursor |
CBrush | wxBrush |
CPen | wxPen |
CFont | wxFont |
CImageList | wxImageList, wxIconBundle |
CPalette | wxPalette |
CRgn | wxRegion |
CClientDC | wxClientDC |
CMetaFileDC | wxMetaFileDC |
CPaintDC | wxPaintDC |
CWindowDC | wxWindowDC |
CDC | wxDC, wxMemoryDC |
Data Structure Classes | |
MFC version | wxWidgets version |
CArray , CObArray , CPtrArray | wxArray |
CStringArray | wxArrayString |
CDWordArray , CByteArray , CUIntArray | wxArrayInt |
CList , CPtrList , CObList | wxList |
CStringList | wxArrayString, wxStringList |
CMap | wxHashMap |
CString | wxString |
CPoint | wxPoint |
CRect | wxRect |
CSize | wxSize |
CTime | wxDateTime |
CTimeSpan | wxTimeSpan, wxDateSpan |
COleVariant | wxVariant |
Internet Classes | |
MFC version | wxWidgets version |
CSocket | wxSocket |
CFtpConnection | wxFTP |
CHttpConnection | wxHTTP |
Document/View Classes | |
MFC version | wxWidgets version |
CDocument | wxDocument |
CView | wxView |
CDocTemplate , CSingleDocTemplate , CMultiDocTemplate | wxDocTemplate |
Drag and Drop Classes | |
MFC version | wxWidgets version |
COleDataSource | wxDataObject |
COleDropSource | wxDropSource |
COleDropTarget | wxDropTarget |
File Classes | |
MFC version | wxWidgets version |
CFile | wxFile, wxFFile, wxTextFile |
CMemFile | wxMemoryInputStream, wxMemoryOutputStream |
CSocketFile | wxSocketInputStream, wxSocketOutputStream |
CRecentFileList | wxFileHistory |
Multithreading Classes | |
MFC version | wxWidgets version |
CWinThread | wxThread |
CCriticalSection | wxCriticalSection |
CMutex | wxMutex |
CSemaphore | wxSemaphore |
非常经典的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