FreeBasic
Главная
Вход
Регистрация
Пятница, 27.12.2024, 03:45Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
WinAPI+SDL
fumleadДата: Суббота, 13.07.2013, 12:30 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Всем доброго времени суток.
Потребовалось объединить в одном окне SDL-окно и интерфейс WinAPI (либо любую другую доступную библиотеку для создания интерфейса). Собственно, сделать это никак не получается, поиск ничего не дал. 
Прошу помощи.
 
haavДата: Суббота, 13.07.2013, 21:37 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Привет fumlead!

Если хочется юзать WinApi интерфейс рядом с окном SDL, нужно создать основное окно, в нем окно SDL где будет графика и оставшееся место под контролы WinApi. При попытках пихать контролы в само графическое окно скорее всего ничего хорошего не выйдет. Вообще WinApi GUI не для этого. Я не знаю ни одной полноценной халявной либы для создания интерфейса в играх, демках и пр. Есть одна симпотная, но опять же в ней лишь некоторые контролы и она заточена под OpenGL. Завтра я ее выложу на основном своем сайте.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Воскресенье, 14.07.2013, 10:01 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Я тут по быстрому на коленке написал принцип того, что описал выше. Код выглядит конечно коряво, но основную суть передает:

Код
''
'' SDL pixel ploting example
''

#Include "SDL\SDL_syswm.bi"
#Include  "SDL\SDL.bi"
Const SCR_WIDTH  = 320*1
Const SCR_HEIGHT = 240*1

Declare Sub doRender (ByVal video As SDL_Surface Ptr)
Declare Sub SDLDRAW(iparam As Any Ptr)

Dim result As Unsigned Integer
Dim Shared video As SDL_Surface Ptr
Dim Shared event As SDL_Event

result = SDL_Init(SDL_INIT_EVERYTHING)
If result <> 0 Then
  End 1
End If

video = SDL_SetVideoMode( SCR_WIDTH, SCR_HEIGHT, 32, SDL_NOFRAME)
If video = 0 Then
  SDL_Quit
  End 1
End If

Dim As SDL_SysWMinfo wmInfo

SDL_GetWMInfo(@wmInfo)

Dim As HWND hwndSDL = wmInfo.window
Dim As hwnd mainhwnd
Dim msg As MSG
Dim As WNDCLASSEX wc
Dim As String NameClass="MyClass"

Function wndproc(hwnd As HWND, msg As UInteger,_
  wparam As WPARAM, lparam As LPARAM) As Integer
  Select Case msg
   Case WM_DESTROY
    PostQuitMessage(0)
   Case WM_COMMAND
    End
  End Select
  Return DefWindowProc(hwnd,msg,wparam,lparam)
End Function

With wc
  .cbSize=SizeOf(WNDCLASSEX)
  .style=CS_HREDRAW Or CS_VREDRAW
  .lpfnWndProc=@wndproc
  .hIcon=LoadIcon(0,IDI_QUESTION)
  .hCursor=LoadCursor(0,IDC_HELP)
  .hbrBackground=Cast(HBRUSH,COLOR_WINDOWFRAME)
  .lpszClassName=StrPtr(NameClass)
  .hIconSm=.hIcon
End With

If RegisterClassEx(@wc)=0 Then
  Print "Register error, press any key"
  Sleep
  End
EndIf

mainhwnd = CreateWindowEx(0,NameClass,"SDLPARENT",_
WS_VISIBLE Or WS_OVERLAPPEDWINDOW,100,100,400,400,0,0,0,0)
Var button = CreateWindowEx(0,"Button","Âûõîä",_
WS_VISIBLE Or WS_CHILD,30,300,80,20,mainhwnd,1,0,0)

SetParent(hwndSDL, mainhwnd)
ThreadCreate(@SDLDRAW)
MoveWindow(hwndSDL, 10, 10, 320, 240, FALSE)

While GetMessage(@msg,0,0,0)
  TranslateMessage(@msg)
  DispatchMessage(@msg)
Wend

Sub SDLDRAW(iparam As Any Ptr)
  Do

   doRender video

   SDL_Flip video

   SDL_PumpEvents
  Loop Until( (SDL_PollEvent( @event ) <> 0) And ((event.type = SDL_KEYDOWN) Or (event.type = SDL_MOUSEBUTTONDOWN)) )
End Sub

Sub doRender( ByVal video As SDL_Surface Ptr )
  Dim buffer As UInteger Ptr
  Dim x As Integer, y As Integer
  Dim c As UInteger
  Dim i As Integer

  SDL_LockSurface( video )

  For i = 1 To 1000
   x = Rnd * (SCR_WIDTH-1)
   y = Rnd * (SCR_HEIGHT-1)
   c = (Rnd * 256) Shl 8 ' 2^24

   buffer = video->pixels + y * video->pitch + x * Len( Integer )

   *buffer = c
  Next i

  SDL_UnlockSurface( video )

End Sub



Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
fumleadДата: Воскресенье, 14.07.2013, 12:35 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
haav, спасибо большое, то что нужно. Код понятен.
 
  • Страница 1 из 1
  • 1
Поиск: