Gość Opublikowano 28 Sierpnia 2010 Opublikowano 28 Sierpnia 2010 Witam :) Ostatnio po konwersacji z YXE, doszedł on do wniosku (i ja w sumie trochę też :D) że okno GMa - to w którym robimy gry - ma rodzica. Czy jest to prawda? Ponieważ po utworzeniu własnej procedury, przypisaniu jej do okna GMa, ono nadal nie obsługuje zdarzeń (a przecież powinno). Więc jeśli jest ten rodzic, to w jaki sposób pobrać jego uchwyt, aby to w nim podmienić procedurę? Dodam, że pracuję w C++ i ta cała podmiana etc. dzieje się w DLLce. Pozdrawiam. E: Tu akurat Snake by się mógł wypowiedzieć : )
PsichiX Opublikowano 28 Sierpnia 2010 Opublikowano 28 Sierpnia 2010 Snake wlasnie powiedzial mi ze GM nie ma raczej zadnego rodzica a My zapomnielismy o jednym malym szczegole :> sprawdz czy z SetClassLong zadziala
Gość Opublikowano 28 Sierpnia 2010 Opublikowano 28 Sierpnia 2010 Ok, już sprawdzam, skutki dam w edicie. E: A ja czytając dokładnie opis funkcji SetWindowLong, doczytałem, że funkcja ta zwraca POPRZEDNIĄ wymaganą wartość (czyli u mnie GWL_WNDPROC). I w ten sposób ustawiłem wpOrig :) E2: Po użyciu SetClassLong jest tak samo - nie działa :<
Snake Opublikowano 28 Sierpnia 2010 Opublikowano 28 Sierpnia 2010 Coś musisz robić nie tak, mi działa bez problemu używając SetWindowLong. Napisałem dla testów coś takiego: #include <windows.h> WNDPROC g_procPrev; LRESULT CALLBACK WndProc( HWND aWnd, UINT aMsg, WPARAM aWparam, LPARAM aLparam ) { char character[2] = {0}; switch ( aMsg ) { case WM_CHAR: character[0] = (char) aWparam; MessageBoxA( aWnd, character, "", 0 ); break; case WM_LBUTTONDOWN: MessageBoxA( aWnd, "Click.", "", 0 ); } return CallWindowProc( g_procPrev, aWnd, aMsg, aWparam, aLparam ); } extern "C" __declspec( dllexport ) double Subclass( double aHandle ) { g_procPrev = (WNDPROC) SetWindowLong( (HWND) (DWORD) aHandle, GWL_WNDPROC, (LONG) WndProc ); return 0.0; } i jest ok.
Gość Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 Może mi nie działa, bo ja używam uchwytu, który pobieram funkcją z DLLki. Mam funkcję Box_Handle(double gmhWnd) i ona ustawia m_hWnd. Potem w tych callbackach używam m_hWnd (w oby dwóch, w moim i tym głównym).
DobryZiom Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 nie lepiej chwytać okno normalnie? O tak: HWND hWnd = (HWND)(int)hWndGM;
Kofel Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 nie lepiej chwytać okno normalnie? O tak:HWND hWnd = (HWND)(int)hWndGM; przeczytaj temat.
Gość Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 Dzięki Snake, Twoim sposobem podmieniła się procedura. Ale zauważyłem, że w ogóle nie działa WM_MENUCOMMAND. Kiedy dam: switch (uMsg) { case WM_MENUCOMMAND: MessageBox(hWnd, "test", "test", 0); break; } To zero reakcji.
PsichiX Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 bo nie ma menu podpietego pod okno, dla tego nie odbiera tego komunikatu
Gość Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 A SetMenu nie podpina ? Co dziwne, WM_COMMAND obsługuje. E: No to w jaki sposób podpiąć to menu?
Snake Opublikowano 29 Sierpnia 2010 Opublikowano 29 Sierpnia 2010 Podpina. Jeśli WM_COMMAND obsługuje to w czym problem? Jak wolisz obsługiwać komunikat WM_MENUCOMMAND zamiast tamtego to dodaj styl MNS_NOTIFYBYPOS do głównego menu.
Gość Opublikowano 30 Sierpnia 2010 Opublikowano 30 Sierpnia 2010 A to mam umieścić w DLL_PROCESS_ATTACH? Tak jak w aplikacji EXE się to umieszcza w WinMain.
Snake Opublikowano 30 Sierpnia 2010 Opublikowano 30 Sierpnia 2010 Co umieścić, SetMenu? Umieść gdzie chcesz, po zainicjalizowaniu całego menu najlepiej.
Snake Opublikowano 30 Sierpnia 2010 Opublikowano 30 Sierpnia 2010 HMENU menuMain = CreateMenu(); MENUINFO menuInfo; menuInfo.cbSize = sizeof( menuInfo ); menuInfo.fMask = MIM_STYLE; GetMenuInfo( menuMain, &menuInfo ); menuInfo.dwStyle |= MNS_NOTIFYBYPOS; SetMenuInfo( menuMain, &menuInfo ); Po utworzeniu menu za pomocą CreateMenu.
Gość Opublikowano 30 Sierpnia 2010 Opublikowano 30 Sierpnia 2010 A, no dzięki wielkie ;) Temat jeszcze zostawię. E: A w jaki sposób wyświetlić w MessageBox wartość zmiennej ClickedItem, jeśli jest ona liczbą?
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się