781
Na warsztacie / Odp: Odp: Exe - konwersja na C++
« dnia: 01 Marca 2017, 14:17:53 »1. Okno nie pozwala na wyświetlenie innego okna na nim (regresja).Hmm czy to jest w trybie pelnoekranowym, czy w oknie? Jesli w oknie to obawiam sie, ze u mnie to dziala (w zalaczniku)
Cytuj
3. Ignorowanie opcji Napisy z GLUT32.DLL. Czyli brzydki szeryfowy za gruby font.Font jest akurat bezszeryfowy, bo to Lucida Console :) Dalem grubszy, bo cienkie linie dosc zle sie w moim doswiadczeniu czyta. Moge dac cienszy, ale czy ktos nie bedzie wtedy narzekal ze zle widzi? Pod dyskusje.
Aha, glut jest faktycznie wylaczony, ale to nie ma specjalnego wplywu na font, bo ustawic mozna dosc dowolny. Sprowadza sie do tego, ktore beda dostepne na wiekszosci komputerow, i czytelnosci.
@tmj: nie wiem jak to zrobiłeś bo znowu zapomniałeś wrzucić na githuba, ale glfw i wm_copydata raczej nie pogodzisz. Wysyłane przez PostMessage można przechywić peekując komunikaty przed glfwpollevents, ale tym nie da się przesyłać payloadu. Trzeba użyć SendMessage a to idzie prosto do callbacka w glfw, więc musiałbyś wydrzeć callbacka z glfw do siebie, przetworzyć niektóre komunikaty i spowrotem przekazać do glfw.No i mniej wiecej tak to dziala. glfw pod windows to ciagle jest okno windows, tyle ze ma wlasna procedure obslugi komunikatow windows. A windows systemowo pozwala na podmiane window proc. Czyli robisz takie cos:
Kod: [Zaznacz]
#ifdef _WINDOWS
HWND Hwnd;
WNDPROC BaseWindowProc;
LRESULT APIENTRY WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch( uMsg ) // check for windows messages
{
case WM_COPYDATA: {
// obsługa danych przesłanych przez program sterujący
pDane = (PCOPYDATASTRUCT)lParam;
if( pDane->dwData == 'EU07' ) // sygnatura danych
World.OnCommandGet( (DaneRozkaz *)( pDane->lpData ) );
break;
}
}
// pass all unhandled messages to DefWindowProc
return CallWindowProc( BaseWindowProc, Hwnd, uMsg, wParam, lParam );
};
(...)
// setup wrapper for base glfw window proc, to handle copydata messages
Hwnd = glfwGetWin32Window( window );
BaseWindowProc = (WNDPROC)::SetWindowLongPtr( Hwnd, GWLP_WNDPROC, (LONG)WndProc );
#endif
i juz. Jak przychodzi COPYDATA to exe obsluguje je pierwsza, a wszystko inne idzie przelotowo do glfw. (COPYDATA tez idzie, tylko moment pozniej)Na githuba jeszcze nie wrzucilem bo o 5-ej nad ranem juz mi sie nie chcialo. Sprawdze jeszcze u siebie pare rzeczy i pojdzie troche pozniej.