Opublikowano 16 Sierpnia 20231 r 👋 Cześć wszystkim! Chciałbym podzielić się z Wami pewnym rozwiązaniem dotyczącym problemu, który sam niedawno napotkałem. Może niektórzy z Was również zetknęli się z sytuacją, w której podczas obracania kamery i jednoczesnym zminimalizowaniu klienta gry, kursor myszy zostaje zablokowany. Przedstawienie błędu: Lokalizacja pliku: 'UserInterface -> PythonApplicationProcedure.cpp' 🔍Znajdź: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się w powyższej funkcji znajdź taki warunek: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się ➕Następnie dodaj: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się Ta linia kodu skutecznie naprawi problem z zawieszającym się kursorem podczas obracania kamery. 🎁Bonus Wrzucam plik 'PythonAplicationProcedure.cpp' z małym code review. Jeśli chcesz z niego skorzystać zaktualizuj definicje w pliku 'PythonAplication.h'. Lokalizacja pliku: 'UserInterface -> PythonApplication.h' 🔍Znajdź: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 🔄Zmień na: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 🔍Znajdź 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 🔄Zmień na: 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się 📈Ulepszony plik: 'UserInterface -> PythonApplicationProcedure.cpp' Spoiler 🔐 Ukryta Treść 🔐 Zaloguj się lub Zarejestruj się
Opublikowano 9 Września 20231 r W dniu 16.08.2023 o 20:32, Sevence napisał(a): 👋 Cześć wszystkim! Chciałbym podzielić się z Wami pewnym rozwiązaniem dotyczącym problemu, który sam niedawno napotkałem. Może niektórzy z Was również zetknęli się z sytuacją, w której podczas obracania kamery i jednoczesnym zminimalizowaniu klienta gry, kursor myszy zostaje zablokowany. Przedstawienie błędu: Lokalizacja pliku: 'UserInterface -> PythonApplicationProcedure.cpp' 🔍Znajdź: LRESULT CPythonApplication::WindowProcedure w powyższej funkcji znajdź taki warunek: if (m_isWindowFullScreenEnable) { __MinimizeFullScreenWindow(hWnd, m_dwWidth, m_dwHeight); } ➕Następnie dodaj: OnMouseMiddleButtonUp(0, 0); Ta linia kodu skutecznie naprawi problem z zawieszającym się kursorem podczas obracania kamery. 🎁Bonus Wrzucam plik 'PythonAplicationProcedure.cpp' z małym code review. Jeśli chcesz z niego skorzystać zaktualizuj definicje w pliku 'PythonAplication.h'. Lokalizacja pliku: 'UserInterface -> PythonApplication.h' 🔍Znajdź: LRESULT WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam); 🔄Zmień na: LRESULT WindowProcedure(HWND hWnd, std::uint32_t uiMsg, WPARAM wParam, LPARAM lParam); 🔍Znajdź void __SetFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP); void __MinimizeFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight); 🔄Zmień na: void SetFullScreenWindow(HWND hWnd, std::uint32_t dwWidth, std::uint32_t dwHeight, std::uint32_t dwBPP); void __MinimizeFullScreenWindow(HWND hWnd, std::uint32_t dwWidth, std::uint32_t dwHeight); 📈Ulepszony plik: 'UserInterface -> PythonApplicationProcedure.cpp' Pokaż ukrytą zawartość #include "StdAfx.h" #include "PythonApplication.h" #include "../eterlib/Camera.h" #include "../CWebBrowser/CWebBrowser.h" #include <winuser.h> static int32_t gs_nMouseCaptureRef = 0; void CPythonApplication::SafeSetCapture() { SetCapture(m_hWnd); gs_nMouseCaptureRef++; } void CPythonApplication::SafeReleaseCapture() { gs_nMouseCaptureRef--; if (gs_nMouseCaptureRef == 0) { ReleaseCapture(); } } void CPythonApplication::SetFullScreenWindow(HWND hWnd, std::uint32_t dwWidth, std::uint32_t dwHeight, std::uint32_t dwBPP) { if (dwBPP == 0 || dwWidth == 0 || dwHeight == 0) { return; } DEVMODE DevMode{}; DevMode.dmSize = sizeof(DevMode); DevMode.dmBitsPerPel = dwBPP; DevMode.dmPelsWidth = dwWidth; DevMode.dmPelsHeight = dwHeight; DevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; int32_t Error = ChangeDisplaySettings(&DevMode, CDS_FULLSCREEN); if (Error == DISP_CHANGE_RESTART) { ChangeDisplaySettings(nullptr, 0); } } void CPythonApplication::__MinimizeFullScreenWindow(HWND hWnd, std::uint32_t dwWidth, std::uint32_t dwHeight) { ChangeDisplaySettings(nullptr, 0); SetWindowPos(hWnd, nullptr, 0, 0, dwWidth, dwHeight, SWP_SHOWWINDOW); ShowWindow(hWnd, SW_MINIMIZE); } LRESULT CPythonApplication::WindowProcedure(HWND hWnd, std::uint32_t uiMsg, WPARAM wParam, LPARAM lParam) { const int32_t c_DoubleClickTime = 300; const int32_t c_DoubleClickBox = 5; static int32_t s_xDownPosition = 0; static int32_t s_yDownPosition = 0; switch (uiMsg) { case WM_ACTIVATEAPP: { m_isActivateWnd = (wParam == WA_ACTIVE) || (wParam == WA_CLICKACTIVE); if (m_isActivateWnd) { m_SoundManager.RestoreVolume(); if (m_isWindowFullScreenEnable) { SetFullScreenWindow(hWnd, m_dwWidth, m_dwHeight, m_pySystem.GetBPP()); } } else { m_SoundManager.SaveVolume(); if (m_isWindowFullScreenEnable) { __MinimizeFullScreenWindow(hWnd, m_dwWidth, m_dwHeight); } OnMouseMiddleButtonUp(0, 0); } } break; case WM_INPUTLANGCHANGE: { return CPythonIME::Instance().WMInputLanguage(hWnd, uiMsg, wParam, lParam); } case WM_IME_STARTCOMPOSITION: { return CPythonIME::Instance().WMStartComposition(hWnd, uiMsg, wParam, lParam); } case WM_IME_COMPOSITION: { return CPythonIME::Instance().WMComposition(hWnd, uiMsg, wParam, lParam); } case WM_IME_ENDCOMPOSITION: { return CPythonIME::Instance().WMEndComposition(hWnd, uiMsg, wParam, lParam); } case WM_IME_NOTIFY: { return CPythonIME::Instance().WMNotify(hWnd, uiMsg, wParam, lParam); } case WM_IME_SETCONTEXT: { lParam &= ~(ISC_SHOWUICOMPOSITIONWINDOW | ISC_SHOWUIALLCANDIDATEWINDOW); } break; case WM_CHAR: { return CPythonIME::Instance().WMChar(hWnd, uiMsg, wParam, lParam); } case WM_KEYDOWN: { OnIMEKeyDown(LOWORD(wParam)); } break; case WM_LBUTTONDOWN: { SafeSetCapture(); if (ELTimer_GetMSec() - m_dwLButtonDownTime < c_DoubleClickTime && abs(LOWORD(lParam) - s_xDownPosition) < c_DoubleClickBox && abs(HIWORD(lParam) - s_yDownPosition) < c_DoubleClickBox) { m_dwLButtonDownTime = 0; OnMouseLeftButtonDoubleClick(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } else { m_dwLButtonDownTime = ELTimer_GetMSec(); OnMouseLeftButtonDown(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } s_xDownPosition = LOWORD(lParam); s_yDownPosition = HIWORD(lParam); return 0; } case WM_LBUTTONUP: { m_dwLButtonUpTime = ELTimer_GetMSec(); if (hWnd == GetCapture()) { SafeReleaseCapture(); OnMouseLeftButtonUp(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } } break; case WM_MBUTTONDOWN: { SafeSetCapture(); UI::CWindowManager::Instance().RunMouseMiddleButtonDown(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } break; case WM_MBUTTONUP: { if (GetCapture() == hWnd) { SafeReleaseCapture(); UI::CWindowManager::Instance().RunMouseMiddleButtonUp(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } } break; case WM_RBUTTONDOWN: { SafeSetCapture(); OnMouseRightButtonDown(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); return 0; } case WM_RBUTTONUP: { if (hWnd == GetCapture()) { SafeReleaseCapture(); OnMouseRightButtonUp(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } return 0; } case 0x20a: { if (WebBrowser_IsVisible()) { // ;o } else { OnMouseWheel(int16_t(HIWORD(wParam))); } } break; case WM_SIZE: { switch (wParam) { case SIZE_RESTORED: case SIZE_MAXIMIZED: { RECT rcWnd; GetClientRect(&rcWnd); uint32_t uWidth = rcWnd.right-rcWnd.left; uint32_t uHeight = rcWnd.bottom-rcWnd.left; m_grpDevice.ResizeBackBuffer(uWidth, uHeight); } break; } if (wParam == SIZE_MINIMIZED) { m_isMinimizedWnd = true; } else { m_isMinimizedWnd = false; } OnSizeChange(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } break; case WM_EXITSIZEMOVE: { RECT rcWnd; GetClientRect(&rcWnd); uint32_t uWidth = rcWnd.right-rcWnd.left; uint32_t uHeight = rcWnd.bottom-rcWnd.left; m_grpDevice.ResizeBackBuffer(uWidth, uHeight); OnSizeChange(int16_t(LOWORD(lParam)), int16_t(HIWORD(lParam))); } break; case WM_SYSKEYDOWN: { switch (LOWORD(wParam)) { case VK_F10: { break; } } } break; case WM_SYSKEYUP: { switch(LOWORD(wParam)) { case 18: { return false; } case VK_F10: { break; } } } break; case WM_SETCURSOR: { if (IsActive()) { if (m_bCursorVisible && CURSOR_MODE_HARDWARE == m_iCursorMode) { SetCursor((HCURSOR) m_hCurrentCursor); return 0; } else { SetCursor(nullptr); return 0; } } } break; case WM_CLOSE: { #ifdef _DEBUG PostQuitMessage(0); #else RunPressExitKey(); #endif return 0; } case WM_DESTROY: { return 0; } default: { break; } } return CMSApplication::WindowProcedure(hWnd, uiMsg, wParam, lParam); } Brakuje coś w kodzie bo wyskakuje mi taki komunikat: Nie dodawałem ulepszonego pliku
Opublikowano 9 Września 20231 r Autor Wejdź do PythonAplication.cpp i PythonAplication.h i zmień __SetFullScreenWindow na SetFullScreenWindow.
Opublikowano 9 Września 20231 r 16 minut temu, Sevence napisał(a): Wejdź do PythonAplication.cpp i PythonAplication.h i zmień __SetFullScreenWindow na SetFullScreenWindow. Problem Rozwiązany
Opublikowano 1 Października 20231 r Cholernie to irytuje w wielu grach nie tylko metku, piękna zmiana ❤️
Opublikowano 10 Stycznia 20241 r Fajnie bede testował. Edytowane 13 Stycznia 20241 r przez Dziki Czan
Opublikowano 13 Stycznia 20241 r Po tych zmianach nie można ot tak złapać okno i przenieść. Trzeba najpierw kliknąć na pulpit a potem można przenieść okno
Opublikowano 13 Stycznia 20241 r 4 godziny temu, Dziki Czan napisał(a): Po tych zmianach nie można ot tak złapać okno i przenieść. Trzeba najpierw kliknąć na pulpit a potem można przenieść okno Czyli działa 😄
Opublikowano 13 Stycznia 20241 r Godzinę temu, Marchewa napisał(a): Czyli działa 😄 Naprawia jedno, ale psuje drugie, trzeba wybrać po prostu co komu lepsze xd
Opublikowano 13 Stycznia 20241 r 22 minuty temu, Dziki Czan napisał(a): Naprawia jedno, ale psuje drugie, trzeba wybrać po prostu co komu lepsze xd Nie wiem czy ta poprawka też trochęnie utrudni korzystania z autoklikera Tiny Task ;d
Opublikowano 13 Stycznia 20241 r Autor Hmm, sprawdzę ten problem i ewentualnie zaktualizuje poradnik.
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.