MFC: _AFXWIN_INLINE daje mi „żadna przeciążona funkcja nie przyjmuje 6 argumentów”

Nov 26 2020

W aplikacji MFC próbuję przenieść okno konsoli, które dodałem w celu debugowania.

    /*  Put here just for reference
        _AFXWIN_INLINE void CWnd::MoveWindow(LPCRECT lpRect, BOOL bRepaint)
        { MoveWindow(lpRect->left, lpRect->top, lpRect->right - lpRect->left,
        lpRect->bottom - lpRect->top, bRepaint); }
    */
        HANDLE hh;
        bool oo = CWnd::MoveWindow( hh, 100, 0, 300, 300, true );

Otrzymuję ten błąd:

Error   C2661   'CWnd::MoveWindow': no overloaded function takes 6 arguments    
G:\proj\repos\EnterDG\EnterDGDlg.cpp    201

Dziwne jest to, że jeśli ustawię wskaźnik myszy na „MoveWindow”, „otrzymam oczekiwany prototyp. Ale jeśli użyję„ goto definition ”, otrzymam definicję, którą widzisz w pierwszych wierszach (wyszarzona).

Próbowałem „#undef _AFXWIN_INLINE”

Odpowiedzi

2 IInspectable Nov 26 2020 at 09:44

CWnd :: MoveWindow ma dwa przeciążenia, jeden przyjmuje 5 argumentów, a drugi 2 argumenty. Jak wskazuje błąd, nie ma przeciążenia, które przyjmuje 6 argumentów.

Wygląda na to, że zamiast tego próbujesz wywołać funkcję Windows API MoveWindow . Jest to darmowa funkcja, więc musisz porzucić CWnd::rozdzielczość oscyloskopu. Używanie przedrostka rozpoznawania globalnej przestrzeni nazw jest zawsze bezpieczne, np ::MoveWindow(...);. : .