Pregunta

Siguiendo el tutorial en http://www.codersource.net/mfc/ MFC-tutoriales / ctabctrl.aspx , me han declarado la función ActivateTabDialogs() en mi archivo de cabecera y lo llamó dentro de otra función en mi clase. El compilador da C2065: 'ActivateTabDialogs' : undeclared identifier de error, en la línea de ActivateTabDialogs(); dentro de la definición de la función OnSelChange(). ¿Qué estoy violando aquí?

Esta es mi parte de declaración en el TCGeriArama_TabCtrl.h archivo de cabecera

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();

Esta es la definición de ActivateTabDialogs() y la parte que estoy llamando 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;
}

Gracias.

¿Fue útil?

Solución 3

Resulta que yo no agregar el controlador utilizando el asistente de clase, y poner manualmente el OnSelChange() función, y que estaba causando el problema. Muchas gracias por su atención

Otros consejos

Bueno al parecer OnSelChange es una función gratuita. ActiveTabDialogs es un miembro-función de la CTCGeriArama_TabCtrl clase. Las funciones miembro tienen que ser llamado en una instancia de la clase que son un miembro de. Hay dos opciones:

  1. Hacer OnSelChange una función miembro de CTCGeriArama_TabCtrl también.
  2. Cambiar la llamada a someObj.ActiveTabDialogs() y proporcionar OnSelChange con una referencia a una instancia CTCGeriArama_TabCtrl.

Desde el aspecto de que OnSelChange es una función de devolución de llamada. Probablemente sería difícil hacer que una función miembro, ya que ello cambie de tipo puntero. Si se trata de una llamada de retorno para algún tipo de marco que está utilizando, usted debe asegurarse de que ese marco proporciona un mecanismo para pasar información contextual a la devolución de llamada-controlador (probablemente lo que el NMHDR* pNMHDR-parámetro es para).

En el enlace dado por la que OnSelchange función es una función miembro.

Así que trate de cambiar

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

a:

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top