Jako, że wiele osób pytało na forum i poza nim czy można pobrać uchwyt HWND okna utworzonego przez SDL, postanowiłem napisać mały art o tym.
Co nam będzie potrzebne ?
#include "SDL.h"
#include "SDL_syswm.h"
int main( int, char *[] )
{
SDL_Surface * SCREEN;
if( SDL_Init( SDL_INIT_EVERYTHING ) ==- 1 )
{
return false;
}
SCREEN = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE );
if( SCREEN == NULL )
{
return false;
}
SDL_SysWMinfo WMI;
SDL_VERSION( & WMI.version );
if( SDL_GetWMInfo( & WMI ) )
{
HWND hwnd = WMI.window;
}
SDL_Quit();
return 0;
}
Teraz wytłumaczę krok po kroku co do czego.
Najpierw musimy dołączyć potrzebne nagłówki SDL.h i SDL_syswm.h.
#include "SDL.h"
#include "SDL_syswm.h"
int main( int, char *[] )
{
Następnie przystąpimy do stworzenia okna w SDL, by to zrobić najpierw musimy powołać bibliotekę do "życia" funkcją
SDL_Init(), po czym ustawić tryb ekranowy dla jednej z powierzchni graficznej funkcją
SDL_SetVideoMode().
SDL_Surface * SCREEN;
if( SDL_Init( SDL_INIT_EVERYTHING ) ==- 1 )
{
return false;
}
SCREEN = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE );
if( SCREEN == NULL )
{
return false;
}
Teraz zajmiemy się pobieraniem uchwytu naszego okna.
SDL_SysWMinfo WMI;
SDL_VERSION( & WMI.version );
if( SDL_GetWMInfo( & WMI ) )
{
HWND hwnd = WMI.window;
}
Najpierw tworzymy obiekt struktury SDL_SysWMinfo po czym wywołujemy metodę SDL_VERSION, która uzupełni naszą strukturę o potrzebne dane,
następnie sprawdzamy czy funkcja SDL_GetWMInfo() z parametrem WMI(wskaźnik na strukturę SDL_SysWMinfo) pobierze resztę danych o oknie, jeżeli zwróci wartość
1 znaczyć to będzie, że wszystko poszło zgodnie z planem i potrzebne pola
WMI są uzupełnione.
Teraz by dostać się do naszego upragnionego uchwytu musimy po prostu pobrać go z pola
window obiektu
WMI.
Na koniec musimy po sobie posprzątać
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.