MFC: _AFXWIN_INLINE dê-me “nenhuma função sobrecarregada leva 6 argumentos”

Nov 26 2020

Em um aplicativo MFC, estou tentando mover uma janela de console que adicionei para fins de depuração.

    /*  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 );

Eu recebo este erro:

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

O estranho é que se eu colocar o ponteiro do mouse em "MoveWindow" "obtenho o protótipo esperado. Mas se eu usar" goto definition ", obtenho a definição que você vê nas primeiras linhas (em cinza).

Eu tentei "#undef _AFXWIN_INLINE"

Respostas

2 IInspectable Nov 26 2020 at 09:44

CWnd :: MoveWindow tem duas sobrecargas, uma recebendo 5 argumentos, a outra recebendo 2 argumentos. Como o erro indica, não há sobrecarga que leve 6 argumentos.

Parece que você está tentando chamar a função da API do Windows MoveWindow . Esta é uma função gratuita, portanto, você precisa descartar a CWnd::resolução do escopo. Usando um prefixo global resolução namespace é sempre seguro, por exemplo: ::MoveWindow(...);.