Frage

Nach dem Tutorial unter http://www.codersource.net/mfc/ mfc-tutorials / ctabctrl.aspx , ich habe die Funktion ActivateTabDialogs() in meiner Header-Datei deklariert und es in einer anderen Funktion in meiner Klasse. Der Compiler gibt Fehler C2065: 'ActivateTabDialogs' : undeclared identifier, an der Linie ActivateTabDialogs(); innerhalb der Definition der Funktion OnSelChange(). Was mache ich hier zu verletzen?

Hier ist meine Erklärung Teil in der Header-Datei 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();

Hier ist die Definition von ActivateTabDialogs() und der Teil ich bin es in TCGeriArama_TabCtrl.cpp Aufruf

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;
}

Danke.

War es hilfreich?

Lösung 3

Es stellte sich heraus, dass ich nicht den Handler mit dem Klassen-Assistenten hinzugefügt haben, und setzen Sie die Funktion OnSelChange() manuell, und das war das Problem verursacht. Vielen Dank für Ihre Aufmerksamkeit

Andere Tipps

Nun offenbar OnSelChange ist eine kostenlose Funktion. ActiveTabDialogs ist Mitglied-Funktion der Klasse CTCGeriArama_TabCtrl. Member-Funktionen haben auf eine Instanz der Klasse, die sie sind Mitglied genannt werden. Es gibt zwei Möglichkeiten:

  1. Make OnSelChange Mitglied Funktion von CTCGeriArama_TabCtrl zu.
  2. Ändern Sie den Aufruf an someObj.ActiveTabDialogs() und bieten OnSelChange mit einem Verweis auf eine CTCGeriArama_TabCtrl-Instanz.

Von den Blicken von ihm OnSelChange ist eine Callback-Funktion. Es wäre wahrscheinlich schwierig sein, es ein Mitglied-Funktion zu machen, wie das wäre es der Zeigertyp verändern. Wenn dies ein Rückruf für einige Rahmen ist, die Sie verwenden, sollten Sie prüfen, ob dieser Rahmen einen Mechanismus bietet kontext Informationen an den Callback-Handler übergeben (wahrscheinlich das, was der NMHDR* pNMHDR-Parameter ist für).

In der Verbindung von Ihnen angesichts der Funktion OnSelchange ist eine Memberfunktion.

So versuchen zu ändern

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

zu:

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top