代码改变世界

[wxWidget系列] Updating wxWidget from 2.6.X to 2.8.X

2011-04-20 09:10  zhenjing  阅读(478)  评论(0编辑  收藏  举报

Compile Error and Solution:


1.    wxSizer::IsShown -> wxSizer::IsShown must take one argument.
2.    Int GetCount() const->unsign Int GetCount() const
3.    wxCommandEvent's members is protected, please use related interfaces to access them.
4.    wxHIDE_READONLY is not supported by wxFileDialog.
5.    The type of (*wxLIGHT_GREY) or (wxWHITE_PEN) is const wxColor or const wxPen.
6.    Get/SetTitle() is not support by wxWindow, wxTopLevelWindow supports
7.    wxBitmap/wxImage :OK()->IsOk(). Refer to 12.
8.    wxRect::Inside->wxRect::Contains
9.    wxTreeItemId's wxTreeItemId(long item) and operator long() const have been deprecated. Please use IsOk() to check if wxTreeItemId is valid and use default constructor to create invalid wxTreeItemId.
10.    The timer functions are deprecated because they work with one global timer only and wxTimer and/or wxStopWatch classes should be used instead. The wxTimer class allows you to execute code at specified intervals. The wxStopWatch class allows you to measure time intervals.
11.    wxDialog::OnOK/OnCancel() don't exist any more, use SetAffirmative/EscapeId()
12.    Some classes (notably wxBitmap and wxImage) don't define operator==() as it used to work in somewhat unexpected way as it compared only internal pointers and not the object data. The code using it will have to be updated:
    * If the object was compared with wxNullXXX, use IsOk() method instead
    * If valid object need to be compared, use IsSameAs() to reproduce the old
      behaviour or change the code to avoid comparing bitmaps &c.

Run-time Error and Solution:


1.    VS 2008 enhance invalid iterator check, such iterator operator+(), ==, !=.
2.    VS 2008 checks whether sort function is valid or not while debugging. If the sort function does exist contradictory points, there will be an error.
In addition, because of doing validation, it will cost double time than before to do sorting in debug mode of VS.
3.    Since wxGrid uses reference number to manage the lifetime of cell's attributes and renderers, and when the GetCellRenderer() was called, the reference number of the renderer is increased, So the DecRef() was called explicitly. Such as call wxGridCellAttr *wxGrid::GetOrCreateCellAttr(int row, int col) const;  Refer to wxGridCellWorker and wxGridCellRenderer (base class: wxGridCellWorker).
4.    wxMenuItem::wxMenuItem(wxMenu* parentMenu = NULL, int id = wxID_SEPARATOR, const wxString& text = "", const wxString& helpString = "", wxItemKind kind = wxITEM_NORMAL, wxMenu* subMenu = NULL)
For the custom (non-stock) menu items, text must be specified and while helpString may be left empty, it's recommended to pass the item description (which is automatically shown by the library in the status bar when the menu item is selected) in this parameter.
5.    When using wxBitmapButton of wx289, please don't use SetBitmapSelect() to set the bitmap of the button, because that bitmap will only be shown when the button is selected.
6.    wx2.8.9 changes the logic of parsing the virtual key from a char, 0 can not be the default key id, please use -1 instead.
7.    Please use wxTreeCtrl's EVT_TREE_ITEM_MENU to handle the requirement of popping context menu, which can handle not only mouse event and also key event.
8.    Don't forget to add the style of "EXPAND" for your control which you want it to be full fill the space.
9.    Even if the Windows have been hidden, the Sizer also will reserve some space for expendable windows. Thus We should change the proportion flag to control the space allocation.
10.    For bool cell of wxgrid, only "" and "1" are accepted as false and true from version 2.8.9. But in 2.6.2, both "" and "0" are accepted as false.
11.    When wxPlot initializes, it need some font files, if it does not exist, gui will crash without any info.
12.    SetSizeHint() is still an API which is needed to pay more attention, because it may cause some troubles. Maybe you can use Layout() instead or just eliminate it.
13.    If Fit() will use window's best size to display, so if some window should change size in different situation, please use Fit() after create the window.
14.    If you want to use EVT_TEXT_ENTER(id, func), please add wxTE_PROCESS_ENTER to window style. In 2.8.9, wxTE_PROCESS_ENTER is necessary to enable the event wxEVT_COMMAND_TEXT_ENTER.