Domanda

Dopo il tutorial a http://www.codersource.net/mfc/ MFC-tutorial / ctabctrl.aspx , ho dichiarato la funzione ActivateTabDialogs() nel mio file di intestazione e lo ha chiamato all'interno di un'altra funzione nella mia classe. Il compilatore dà errore C2065: 'ActivateTabDialogs' : undeclared identifier, alla linea ActivateTabDialogs(); all'interno della definizione della funzione OnSelChange(). Che cosa sto violando qui?

Ecco la mia parte di dichiarazione nel file di intestazione TCGeriArama_TabCtrl.h

class CTCGeriArama_TabCtrl : public CTabCtrl
{
// Construction
public:
    CTCGeriArama_TabCtrl();

// Attributes

    //Array to hold the list of dialog boxes/tab pages for CTabCtrl
    int m_DialogID[2];

    int m_nPageCount;

    //CDialog Array Variable to hold the dialogs 
    CDialog *m_Dialog[2];

public:
// Operations
    //Function to Create the dialog boxes during startup
    void InitDialogs();

    //Function to activate the tab dialog boxes
    void ActivateTabDialogs();

Ecco la definizione della ActivateTabDialogs() e la parte sto chiamando dentro TCGeriArama_TabCtrl.cpp

void CTCGeriArama_TabCtrl::ActivateTabDialogs()
{
    int nSel = GetCurSel();
    if(m_Dialog[nSel]->m_hWnd)
        m_Dialog[nSel]->ShowWindow(SW_HIDE);

    CRect l_rectClient;
    CRect l_rectWnd;

    GetClientRect(l_rectClient);
    AdjustRect(FALSE,l_rectClient);
    GetWindowRect(l_rectWnd);
    GetParent()->ScreenToClient(l_rectWnd);
    l_rectClient.OffsetRect(l_rectWnd.left,l_rectWnd.top);
    for(int nCount=0; nCount < m_nPageCount; nCount++){
        m_Dialog[nCount]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_HIDEWINDOW);
    }
    m_Dialog[nSel]->SetWindowPos(&wndTop, l_rectClient.left, l_rectClient.top, l_rectClient.Width(), l_rectClient.Height(), SWP_SHOWWINDOW);

    m_Dialog[nSel]->ShowWindow(SW_SHOW);

}

//Selection change event for the class derived from CTabCtrl
void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
{
    // TODO: Add your control notification handler code here
    ActivateTabDialogs(); // HERE'S WHERE THE COMPILER GIVES THE ERROR
    *pResult = 0;
}

Grazie.

È stato utile?

Soluzione 3

Si scopre che non ho aggiungere il gestore utilizzando la procedura guidata di classe, e mettere manualmente la funzione OnSelChange(), e che ha causato il problema. Grazie mille per la vostra attenzione

Altri suggerimenti

Beh a quanto pare OnSelChange è una funzione gratuita. ActiveTabDialogs è un membro funzione della CTCGeriArama_TabCtrl classe. funzioni membro devono essere chiamato su un'istanza della classe sono un membro di. Ci sono due opzioni:

  1. Fare OnSelChange una funzione di membro di CTCGeriArama_TabCtrl troppo.
  2. Cambia la chiamata a someObj.ActiveTabDialogs() e fornire OnSelChange con un riferimento a un CTCGeriArama_TabCtrl istanza.

Dagli sguardi di esso OnSelChange è una funzione di callback. Probabilmente sarebbe difficile rendere un membro-funzione che avrebbe cambiato è del puntatore-tipo. Se questo è un callback per un quadro di riferimento che si sta utilizzando, si dovrebbe verificare se tale quadro fornisce un meccanismo per passare contesto informazioni al callback-handler (probabilmente quello che il NMHDR* pNMHDR-parametro è per).

Nel link indicato dal cliente la funzione OnSelchange è una funzione membro.

Quindi, provare a cambiare

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

a:

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top