Gość Opublikowano 28 Sierpnia 2010 Udostępnij 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ć : ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 28 Sierpnia 2010 Udostępnij 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 28 Sierpnia 2010 Udostępnij 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 :< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 28 Sierpnia 2010 Udostępnij 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 29 Sierpnia 2010 Udostępnij 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). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
DobryZiom Opublikowano 29 Sierpnia 2010 Udostępnij Opublikowano 29 Sierpnia 2010 nie lepiej chwytać okno normalnie? O tak: HWND hWnd = (HWND)(int)hWndGM; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 29 Sierpnia 2010 Udostępnij Opublikowano 29 Sierpnia 2010 nie lepiej chwytać okno normalnie? O tak:HWND hWnd = (HWND)(int)hWndGM; przeczytaj temat. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 29 Sierpnia 2010 Udostępnij 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 29 Sierpnia 2010 Udostępnij Opublikowano 29 Sierpnia 2010 bo nie ma menu podpietego pod okno, dla tego nie odbiera tego komunikatu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 29 Sierpnia 2010 Udostępnij Opublikowano 29 Sierpnia 2010 A SetMenu nie podpina ? Co dziwne, WM_COMMAND obsługuje. E: No to w jaki sposób podpiąć to menu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 29 Sierpnia 2010 Udostępnij 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 30 Sierpnia 2010 Udostępnij Opublikowano 30 Sierpnia 2010 A to mam umieścić w DLL_PROCESS_ATTACH? Tak jak w aplikacji EXE się to umieszcza w WinMain. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 30 Sierpnia 2010 Udostępnij Opublikowano 30 Sierpnia 2010 Co umieścić, SetMenu? Umieść gdzie chcesz, po zainicjalizowaniu całego menu najlepiej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 30 Sierpnia 2010 Udostępnij Opublikowano 30 Sierpnia 2010 Chodzi mi o dodanie tego stylu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 30 Sierpnia 2010 Udostępnij 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 30 Sierpnia 2010 Udostępnij 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ą? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
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ę