Question

Après le tutoriel http://www.codersource.net/mfc/ mfc-tutorials / ctabctrl.aspx , j'ai déclaré la fonction ActivateTabDialogs() dans mon fichier d'en-tête et l'a appelé dans une autre fonction dans ma classe. Le compilateur donne C2065: 'ActivateTabDialogs' : undeclared identifier d'erreur, à la ActivateTabDialogs(); ligne dans la définition de la fonction OnSelChange(). Qu'est-ce que je violais ici?

Voici ma partie de déclaration dans le fichier d'en-tête 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();

Voici la définition de ActivateTabDialogs() et la partie que je vous appelle à l'intérieur 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;
}

Merci.

Était-ce utile?

La solution 3

avère que je n'ai pas ajouté le gestionnaire à l'aide de l'assistant de classe, et de mettre manuellement la fonction OnSelChange(), et qui a été l'origine du problème. Merci beaucoup pour votre attention

Autres conseils

Eh bien apparemment OnSelChange est une fonction libre. ActiveTabDialogs est un élément de fonction de l'CTCGeriArama_TabCtrl de classe. Les fonctions membres doivent être appelés sur une instance de la classe, ils sont un membre. Il y a deux options:

  1. OnSelChange une fonction de membre de CTCGeriArama_TabCtrl aussi.
  2. Modifier l'appel à someObj.ActiveTabDialogs() et de fournir OnSelChange une référence à une CTCGeriArama_TabCtrl instance.

De l'apparence de celui-ci OnSelChange est une fonction de rappel. Il serait sans doute difficile d'en faire un membre-fonction qui changerait son type de pointeur. Si cela est un rappel pour un cadre que vous utilisez, vous devriez vérifier si ce cadre fournit un mécanisme pour passer d'information de contexte au rappel-gestionnaire (probablement ce que le paramètre NMHDR* pNMHDR-est pour).

Dans le lien donné par la fonction que vous OnSelchange est une fonction membre.

Donc, essayez de changer

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

à:

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top