C SDL2.0:如何从SDL_SysWMinfo获取HWND

C SDL2.0:如何从SDL_SysWMinfo获取HWND,c,winapi,sdl,c-preprocessor,C,Winapi,Sdl,C Preprocessor,问题: #include "test.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define WIN_32_LEAN_AND_MEAN /* Trims all the fat from windows */ #include <windows.h> #define SDL_MAIN_HANDLED #ifndef

问题:

#include "test.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define WIN_32_LEAN_AND_MEAN /* Trims all the fat from windows */
#include <windows.h>

#define SDL_MAIN_HANDLED

#ifndef __WIN32__
#define __WIN32__
#endif // __WIN32__

#include "SDL2/SDL.h"
#include "SDL2/SDL_mixer.h"
#include "SDL2/SDL_syswm.h"

void get_system_data( application_data* application )
{
    SDL_VERSION( &application->system_info.version );

    if ( !SDL_GetWindowWMInfo( application->window, &application->system_info ) )
        SDL_errorexit( "SDL_GetWindowWMInfo", SDL_LOG_CATEGORY_ERROR );

     switch ( application->system_info.subsystem )
     {
         case SDL_SYSWM_WINDOWS : break;
         default :
             printf( "Unhandled OS!\n" );
             free_application_data( application );
             exit( 1 );
         break;
     }

     application->h_window = application->system_info.info.window;

     return;
 }
我正在尝试使用win32和SDL2.0创建一个透明窗口,因为它的官方API尚未发布。我在引用窗口字段以访问HWND时遇到问题。它给了我这个错误

F:\C programs and compiliers\C\SDL_test\main.c||In function 'get_system_data':|
F:\C programs and compiliers\C\SDL_test\main.c|220|error: 'union <anonymous>' has no member named 'window'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|
函数“获取系统数据”中的
F:\C程序和编译器\C\SDL_test\main.C |:|
F:\C程序和编译器\C\SDL|U测试\main.C | 220 |错误:“union”

因此:

还有一些其他的stackoverflow代码与之非常相似,它们也不相关,因为它们也不工作

代码:

#include "test.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define WIN_32_LEAN_AND_MEAN /* Trims all the fat from windows */
#include <windows.h>

#define SDL_MAIN_HANDLED

#ifndef __WIN32__
#define __WIN32__
#endif // __WIN32__

#include "SDL2/SDL.h"
#include "SDL2/SDL_mixer.h"
#include "SDL2/SDL_syswm.h"

void get_system_data( application_data* application )
{
    SDL_VERSION( &application->system_info.version );

    if ( !SDL_GetWindowWMInfo( application->window, &application->system_info ) )
        SDL_errorexit( "SDL_GetWindowWMInfo", SDL_LOG_CATEGORY_ERROR );

     switch ( application->system_info.subsystem )
     {
         case SDL_SYSWM_WINDOWS : break;
         default :
             printf( "Unhandled OS!\n" );
             free_application_data( application );
             exit( 1 );
         break;
     }

     application->h_window = application->system_info.info.window;

     return;
 }
#包括“test.h”
#包括
#包括
#包括
#包括
#定义WIN_32_LEAN_和_MEAN/*修剪windows中的所有肥肉*/
#包括
#定义SDL_MAIN_HANDLED
#ifndef\uuU WIN32__
#定义WIN32__
#endif/\uuu WIN32__
#包括“SDL2/SDL.h”
#包括“SDL2/SDL_mixer.h”
#包括“SDL2/SDL_syswm.h”
无效获取系统数据(应用程序数据*应用程序)
{
SDL_版本(&应用程序->系统_信息.VERSION);
如果(!SDL_GetWindowWMInfo(应用程序->窗口,&应用程序->系统信息))
SDL_errorexit(“SDL_GetWindowWMInfo”,SDL_LOG_CATEGORY_ERROR);
交换机(应用程序->系统信息子系统)
{
案例SDL_系统WM_窗口:中断;
违约:
printf(“未处理的操作系统!\n”);
免费应用程序数据(应用程序);
出口(1);
打破
}
应用->h_窗口=应用->系统信息窗口;
返回;
}

我只在这里发布了相关的代码,如果需要,我可以发布更多。

纯粹基于
struct
的声明,我想您可以这样引用
HWND

application->h_window = application->system_info.info.win.window;