2016-11-16 71 views
0

我正在嘗試將SDL1.2的一個自定義版本中的一些C++代碼從SDL1.2更新到SDL2。那些我百思不得其解的線是這些:更新SDL1.2 SDL_GetWMInfo到SDL2 SDL_GetWindowWMInfo

SDL_SysWMinfo systemInfo; 
SDL_VERSION(&systemInfo.version); 

if(SDL_GetWindowWMInfo(window, &systemInfo) !=1) return; 
if (!::OpenClipboard(systemInfo.info.win.window)) return; 

SDL_GetWindowWMInfo在SDL_syswm.h這樣定義的:

typedef struct SDL_SysWMinfo SDL_SysWMinfo; 
extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, SDL_SysWMinfo * info); 

當我嘗試建立在Visual Studio 2010中,我得到這個錯誤,通過拋出在上面的代碼中的第三行:

1> sdlmain.cpp 
1>..\src\gui\sdlmain.cpp(2966): error C2065: 'window' : undeclared identifier 

我想答案就在這裏:

https://gamedev.stackexchange.com/questions/82068/how-can-i-obtain-a-window-handle-in-sdl-2-0-3

但我是一個初學者,無法弄清楚如何適應我自己的代碼。如果有人願意幫助一個完整的初學者,我將不勝感激。

+0

什麼不清楚['爲SDL_GetWindowWMInfo()'wiki頁面(HTTPS://wiki.libsdl .ORG/SDL_GetWindowWMInfo)? – genpfault

+1

@emendelson您不會在評論中進行換行,但您可以編輯自己的問題以包含其他信息。 「捲曲的紅色inderscore」沒有描述任何內容,什麼是實際的錯誤信息?您的窗口在哪裏(以及如何)被定義? (和科西嘉你不能使用任何未聲明的東西) – keltar

+0

我已經用我學到的東西改寫了我的問題。再次感謝任何幫助。 – emendelson

回答

0

通過將第一行(因爲它在SDL維基清楚地解釋)解決:

SDL_Window* window; 
SDL_SysWMinfo systemInfo; 
SDL_VERSION(&systemInfo.version); 

if(SDL_GetWindowWMInfo(window, &systemInfo) !=1) return; 
if (!::OpenClipboard(systemInfo.info.win.window)) return; 
+0

傳遞無效(甚至更糟,未初始化)'window'是一個非常糟糕的主意,因爲至少x11的實現實際上使用窗口數據(沒有檢查其他人;如果他們也這樣做,他們也不會感到驚訝)。這不是維基頁面建議的。傳遞您創建並使用的實際窗口。 – keltar

+0

謝謝你 - 我只是在修改別人的代碼,並且非常感謝你如何改進它。 – emendelson

+0

如果您使用SDL進行繪圖,那麼您正在使用'SDL_CreateWindow'創建窗口。這*是應該傳遞給'SDL_GetWindowWMInfo'的窗口,而不是未定義的。 – keltar