Opublikowano 16 Sierpnia 20232 l 👋 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ź: Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto w powyższej funkcji znajdź taki warunek: ➕Następnie dodaj: 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ź: 🔄Zmień na: 🔍Znajdź 🔄Zmień na: 📈Ulepszony plik: 'UserInterface -> PythonApplicationProcedure.cpp' Spoiler
Opublikowano 9 Września 20232 l W dniu 16.08.2023 o 18: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ź: CKod został skopiowanyLRESULT CPythonApplication::WindowProcedure w powyższej funkcji znajdź taki warunek: CKod został skopiowanyif (m_isWindowFullScreenEnable){ __MinimizeFullScreenWindow(hWnd, m_dwWidth, m_dwHeight);} ➕Następnie dodaj: CKod został skopiowanyOnMouseMiddleButtonUp(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ź: CKod został skopiowanyLRESULT WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam); 🔄Zmień na: CKod został skopiowanyLRESULT WindowProcedure(HWND hWnd, std::uint32_t uiMsg, WPARAM wParam, LPARAM lParam); 🔍Znajdź CKod został skopiowanyvoid __SetFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);void __MinimizeFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight); 🔄Zmień na: CKod został skopiowanyvoid 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ść CKod został skopiowany#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 20232 l Autor Wejdź do PythonAplication.cpp i PythonAplication.h i zmień __SetFullScreenWindow na SetFullScreenWindow.
Opublikowano 9 Września 20232 l W dniu 9.09.2023 o 22:40, Sevence napisał(a): Wejdź do PythonAplication.cpp i PythonAplication.h i zmień __SetFullScreenWindow na SetFullScreenWindow. Problem Rozwiązany
Opublikowano 1 Października 20232 l Cholernie to irytuje w wielu grach nie tylko metku, piękna zmiana ❤️
Opublikowano 10 Stycznia 20242 l Fajnie bede testował. Edytowane 13 Stycznia 20242 l przez Dziki Czan
Opublikowano 13 Stycznia 20242 l 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 20242 l W dniu 13.01.2024 o 03:12, 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 20242 l W dniu 13.01.2024 o 08:08, Marchewa napisał(a): Czyli działa 😄 Naprawia jedno, ale psuje drugie, trzeba wybrać po prostu co komu lepsze xd
Opublikowano 13 Stycznia 20242 l W dniu 13.01.2024 o 09:22, 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 20242 l Autor Hmm, sprawdzę ten problem i ewentualnie zaktualizuje poradnik.
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto