2016-11-16 145 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