[C++] FIX FREEZE WINDOW CLIENT

  • Autor subiect #TrC
  • Dată creare
  • Răspunsuri: Răspunsuri 0
  • Vizualizări: Vizualizări 65

#TrC

Fondator
Membru personal
11 Oct 2017
7.557
6.752
113
Monede Dragon
94
inainte : https://gyazo.com/c64d3e41175fc2f80c1a118387058cec
dupa : https://gyazo.com/b8692ab9d48e9d9af704fc7de1650a72


Cod:
//////PythonApplication.cpp////

// cauta
m_dwLastIdleTime(0),
// adauga
m_IsMovingMainWindow(false)
---------
ai grija la ultima virgula trebuie sa arate asa:
m_dwLastIdleTime(0),
m_IsMovingMainWindow(false)

--------
// cauta
#ifndef _DEBUG
    SetEterExceptionHandler();
#endif
 
// adauga
    m_InitialMouseMovingPoint = {};

// cauta
void CPythonApplication::Loop()
{
  ...
}

// adauga inainte:
void CPythonApplication::SetUserMovingMainWindow(bool flag)
{
    if (flag && !GetCursorPos(&m_InitialMouseMovingPoint))
        return;

    m_IsMovingMainWindow = flag;
}
bool CPythonApplication::IsUserMovingMainWindow() const
{
    return m_IsMovingMainWindow;
}
void CPythonApplication::UpdateMainWindowPosition()
{
    POINT finalPoint{};
    if (GetCursorPos(&finalPoint))
    {
        LONG xDiff = finalPoint.x - m_InitialMouseMovingPoint.x;
        LONG yDiff = finalPoint.y - m_InitialMouseMovingPoint.y;

        RECT r{};
        GetWindowRect(&r);

        SetPosition(r.left + xDiff, r.top + yDiff);
        m_InitialMouseMovingPoint = finalPoint;
    }
}


// cauta
void CPythonApplication::Loop()
{
#ifdef PROFILING
    Profiler::Instance().beginSession("session1");
#endif

    while (1)
    {

// adauga
        if (IsUserMovingMainWindow())
            UpdateMainWindowPosition();
--------
trebuie sa arate asa:
while (1)
    {
        if (IsUserMovingMainWindow())
            UpdateMainWindowPosition();

        if (IsMessage())
        {
            if (!MessageProcess())
                break;
        }
        else
        {
            if (!Process())
                break;

            m_dwLastIdleTime = ELTimer_GetMSec();
        }
    }
//////////////////////////////
///////////// PythonApplication.h
// cauta
void Loop();

// adauga
    bool IsUserMovingMainWindow() const;
    void SetUserMovingMainWindow(bool flag);
    void UpdateMainWindowPosition();

// mergi la final si modifica ultima functie
protected:
    bool m_IsMovingMainWindow;//adauga asta
    POINT m_InitialMouseMovingPoint; // adauga asta
    int m_iCursorNum;
///////////////////////////
//////////////////////////PythonApplicationProcedure.cpp
// cauta
case WM_EXITSIZEMOVE:
{
...
}

// adauga
        case WM_NCLBUTTONDOWN:
        {
            switch (wParam)
            {
            case HTMAXBUTTON:
            case HTSYSMENU:
                return 0;
            case HTMINBUTTON:
                ShowWindow(hWnd, SW_MINIMIZE);
                return 0;
            case HTCLOSE:
                RunPressExitKey();
                return 0;
            case HTCAPTION:
                if (!IsUserMovingMainWindow())
                    SetUserMovingMainWindow(true);
    
                return 0;
            }
    
            break;
        }
        
        case WM_NCLBUTTONUP:
        {
            if (IsUserMovingMainWindow())
                SetUserMovingMainWindow(false);
            
            break;
        }
    
        case WM_NCRBUTTONDOWN:
        case WM_NCRBUTTONUP:
        case WM_CONTEXTMENU:
            return 0;