顯示具有 wxWidgets 標籤的文章。 顯示所有文章
顯示具有 wxWidgets 標籤的文章。 顯示所有文章

10 3月 2013

[wxWidgets] function 傳入wxString的不定參數

在C/C++裡有不定參數的功能,讓一個function可以傳入不固定數目的參數,在function裡,透過va_list, va_arg() 把參數一個個抓出來。

在wxWidgets裡,擁有特有的字串類別wxString,用法跟std::string, std::wstring稍稍不同(多了很多API)。

std::string/std::wstring可以透過c_str()取得的內部字串buffer (char*/wchar_t*)
wxString也可以透過c_str()取得內部字串的buffer,型別是wxChar

wxChar是wxWidgets定義的,會根據compile定義的wxUSE_UNICODE(是否為unicode的build)分別對應到unicode : wchar_t, ansi : char

由於wxString是wxWidgets包裝起來的class,若將它傳進function當不定參數之一,va_arg()將無法取得wxString正確的字串內容,所以如果要將wxString的字串傳入不定參數的function中,需以c_str()傳入wxChar*字串的pointer,才能在function中取得字串的內容。

// the parameter must be wxChar*
// -> please convert wxString by c_str() before push it
//    _T("") would be convert to wxChar*
// Ex: wxString s = _T("Falldog");
//     ComposeContent(2, s.c_str(), _T("'s blogger"));
wxString ComposeString(int count, ...)
{
    wxString res;
    va_list vl;
    va_start(vl, count);
    for(int i=0 ; i<count ; ++i)
        res += va_arg(vl,wxChar*);
    va_end(vl);
    return res;
}

30 8月 2012

[Code::Blocks] Compile Code::Blocks source code in Windows

Code::Blocks是一款出色的跨平台IDE,是用跨平台的語言wxWidgets所寫的,由於wxWidgets並不像Java一樣,有Virtual Machine,是可以build成原生的執行檔執行的,所以執行的速度會快很多。由於最近想寫看看Code::Blocks的PlugIn,所以就試著build CB的source code看看,用CB來build CB倒是挺有趣的。

26 2月 2010

[wxPython] 實作多國語言MUI by GetText

wxPython提供了方便的支援多國語言API,結合GNU GetText project,使用上很是方便。
由GetText parse 檔案後,建出PO檔然後轉成MO檔,就可以給wxPython讀取使用。

16 5月 2008

Windows上建構wxWidgets的編譯環境

如何在Windows上,建構wxWidgets的編譯環境呢?由於wxWidgets只是個Library,所以必須要安裝其他的IDE+Compiler才能寫出wxWidgets的程式,或者也是可以直接用文字編輯器寫code,然後在Comand Line底下compile也是可以(如果你夠勤勞的話...)。否則,裝一個IDE決對是一個事半功倍的事情。
wxWidgets是跨平台的Library,所以我就決定找一個優秀的跨平台IDE:Code::Blocks。這樣在任何平台都可以用熟悉的環境寫wxWidgets的程式,多麼令人蘇胡的一件事啊~ 話不多說,馬上裝來用用看!

11 5月 2008

wxWidgets簡介

  最近有點無聊,想說找找跨平台的Language來玩看看,找了一些資料,也拜讀了PCMan大大的文章(Qt, Gtk+, wxWidgets的比較),感覺wxWidgets在跨平台的表現上很猛的樣子,除了可以在不同的平台上重新編譯外,還可以結合不同的Compiler得到該平台上最佳化的結果(Ex: Windows上可用Visual C++、Borland C++ Builder compile)。
  由於wxWidgets它底層的部分在不同的平台上是重新寫過的,所以跨平台的表現就比其他的Language來得強,也不像Java需要利用JVM來執行(馬的JVM...愈來愈肥)。但是也由於這個因素,在wxWidgets中,並非所有的元件都是跨平台的,有些元件只允許在某平台上才可執行(詳見此)。
  而wxWidgets的中文資料真是有點少得可憐…Google一下wxWidgets,繁體中文的結果竟然不到7000個=_=,看來在台灣真的是不太流行。

wxWidgets簡介
  首先要先了解wxWidgets的定位是什麼,wxWidgets是一個Open Source的C++ GUI Library,所以你可以選擇自己喜歡的開發平台、及該平台上的IDE compiler撰寫wxWidgets的程式。
  如果你不想用C++也沒關係,wxWidgets也提供其他binding wxWidgets的Language,比如Python(wxPython)、Perl(wxPerl)、Java(wx4j)…等等的Language來撰寫。

● wxWidgets支援的平台與相對應的wx Library
  • Windows : wxMSW
  • Linux : wxGTK
  • Mac : wxMac

  由於wxWidgets只是個GUI的Library,所以必須透過其他的IDE來撰寫程式,GUI Library最被迫切需要的就是用快速拖拉的方式(RAD),拉出使用者所見的圖形介面。雖然說直接在文字介面下coding也是可以,但是透過所見即所得的拖拉方式,總是比較輕鬆比較直觀。

● wxWidgets的RAD工具( Rapid Application Development )
  • wxFormBuilder : 免費,跨平台,但是只提供拖拉視窗並產生code,並不提供compile環境(純RAD),而且目前尚未提供將元件拖拉到Form上任何一點的位置,一定要擺在Layout(wxSizer)裡面才行
  • wxSmith : Code::Blocks內建的wxWidgets RAD工具,使用結果覺得不是挺穩定的
  • wxDev-C++ : 以Delphi開發的免費軟體,只能在Windows上執行,RAD+IDE
  • wxGlade : 以wxPython撰寫而成,RAD+IDE
  • 其他...

wxWidgets支援各平台上,在相對應IDE上compile
  • Cross-platform :
    • Code::Blocks
    • Eclipse
  • Windows :
    • Visual C++
    • Borland C++ Builder
    • Dev-C++
  • Linux :
    • Anjuta
    • KDevelop
  • Mac :
    • Xcode

這邊提供一些wxWidgets的連結參考: