下面的教程 http://www.codersource.net/mfc/mfc-tutorials/ctabctrl.aspx 我已经宣布的功能 ActivateTabDialogs() 在我的头文件,并称它是在另一个功能在我的课。编译器给人错误 C2065: 'ActivateTabDialogs' : undeclared identifier, 在线 ActivateTabDialogs(); 内部的定义功能 OnSelChange().我是什么违反了这里?

这是我的宣言部分的头文件 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();

这里的定义 ActivateTabDialogs() 和一部分我叫它的内部 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;
}

谢谢。

有帮助吗?

解决方案 3

原来,我没有使用类向导添加处理程序,并手动将功能OnSelChange(),而且是造成问题。非常感谢您的关注

其他提示

好了很显然 OnSelChange 是一个免费的功能。 ActiveTabDialogs 是一件功能之类的 CTCGeriArama_TabCtrl.成员的职能必须呼吁类的一个实例,他们是成员。有两种选择:

  1. OnSelChange 一个成员的功能 CTCGeriArama_TabCtrl 太。
  2. 改变的呼叫 someObj.ActiveTabDialogs() 和提供 OnSelChange 与一个参考 CTCGeriArama_TabCtrl-实例。

看起来它 OnSelChange 是callback-function.它可能会难以使其成员能因为这将改变它的指针的类型。如果这是一个回对一些框架使用,应检查,如果该框架提供了一些机构通过的上下文的信息来回调处理程序(可能是什么的 NMHDR* pNMHDR-参数)。

在由你给出的链接功能OnSelchange是一个成员函数。

因此,尝试改变

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

为:

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top