質問

次のチュートリアルに従ってください 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. 。メンバー関数は、そのメンバーであるクラスのインスタンス上で呼び出す必要があります。次の 2 つのオプションがあります。

  1. 作る OnSelChange のメンバー関数 CTCGeriArama_TabCtrl あまりにも。
  2. 通話を次のように変更します someObj.ActiveTabDialogs() そして提供します OnSelChange を参照して CTCGeriArama_TabCtrl-実例。

見た目からして OnSelChange はコールバック関数です。ポインター型が変わるため、メンバー関数にするのはおそらく難しいでしょう。これが使用しているフレームワークのコールバックである場合は、そのフレームワークがコンテキスト情報をコールバック ハンドラーに渡す何らかのメカニズムを提供しているかどうかを確認する必要があります (おそらく、 NMHDR* pNMHDR-パラメータは対象です)。

あなたによって与えられたリンクでは、関数OnSelchangeは、メンバ関数です。

だから、変更してみてください。

void OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)

void CTCGeriArama_TabCtrl::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top