2013-02-11 38 views
0

我想創建一個靜態位圖,但構造函數只接受wxGDIImages。 下面是從FormBuilder代碼:wxStaticBitmap構造函數需要wxGDIImage而不是wxBitmap

wxStaticBitmap* tmtBitmap = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxT("directory"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, 0); 

有什麼辦法給wxBitmap轉換爲wxGDIImage?或者給該目錄創建一個wxGDIImage?

也許有另一種方法來做到這一點。

謝謝。

+1

'wxBitmap'是阿'wxGDIImage'(這是一個內部類wxWidgets的那個你應該不需要關心),所以無論你遇到什麼問題都與此無關,在詢問編譯錯誤時,請始終包含(縮寫,如有必要)錯誤消息。 – 2013-02-13 14:32:48

+0

好的,我會記住這一點。 – YahooMania 2013-02-13 16:49:51

回答

0

wxStaticBitmap不接受在其構造wxBitmapwx API-Doc
由編譯器產生的錯誤信息可能會有點誤導 即時猜測你看到這樣的內容:

include/wx/msw/statbmp.h:80: note: candidates are: wxStaticBitmap::wxStaticBitmap(const wxStaticBitmap&) 
include/wx/msw/statbmp.h:34: note:     wxStaticBitmap::wxStaticBitmap(wxWindow*, wxWindowID, const wxGDIImage&, const wxPoint&, const wxSize&, long int, const wxString&) 
include/wx/msw/statbmp.h:25: note:     wxStaticBitmap::wxStaticBitmap() 


既然是隻有上下文取決於,你的指針看起來有問題,要麼你不是「在」wxWindow 「內部」,或者你的編譯器找不到靜態類型。您可以使用這樣的事情來驗證:(不這樣做,在生產代碼)

wxStaticBitmap* tmtBitmap = new wxStaticBitmap((wxWindow*)NULL, wxID_ANY, wxBitmap(wxT("directory"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, 0); 

wxStaticBitmap* tmtBitmap = new wxStaticBitmap((wxWindow*)this, wxID_ANY, wxBitmap(wxT("directory"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, 0); 
+0

你說得對,我不小心抄襲了wxFormBuilder的代碼。 '這'不是一個wxWindow。謝謝。 – YahooMania 2013-02-12 16:11:14

+1

不要使用'NULL'父項創建'wxStaticBitmap',子窗口必須有一個有效的父項。而且,當然,不要將一個非窗口強制轉換爲'wxWindow',這隻會導致崩潰。 – 2013-02-13 14:31:49

+1

也許我應該更具體些,當然使用「空父母」或者只是投射到「wxWindow *」並不是一個好主意。這只是爲了驗證編譯器的輸出 – baxit 2013-02-15 11:36:55