4

CMFCTabCtrl のタブ変更イベントをキャッチしたいと考えています。以下は、私がそれをやろうとしているコードです。ただし、変更イベントはキャッチされません。

BOOL SurvChatDlg::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* 
                               pResult ) 
{ 
if(((LPNMHDR)lParam)->code==TCN_SELCHANGE) 
{ 
    int i = m_TabControl.GetActiveTab();
    AfxMessageBox("Changed");
} 
return CDialog::OnNotify( wParam, lParam, pResult ); 
}
4

2 に答える 2

1

ポストタブの変更をキャッチしたい場合、アクティブになるタブにはAFX_WM_CHANGE_ACTIVE_TABが必要です。

ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB,OnTabSetActive)

LRESULT CYourClass::OnTabSetActive(WPARAM wParam, LPARAM lParam)
{
    const int iActiveTab = (int)wParam;
    int iCheckActiveTab = m_wndTabs.GetActiveTab(); //CMFCTabCtrl m_wndTabs;
    m_wndTabs.SetActiveTab(iActiveTab); //good idea to also add this depending on usage.
    return 0;
}

また、タブ呼び出しを手動で変更する必要がある場合は、;

    SendMessage(AFX_WM_CHANGE_ACTIVE_TAB, iTabNum2ChangeTo, 0);

使用している私の問題の解決策を見つけようとした後、上記を投稿しました

CMFCTabCtrl::SetActiveTab() 

クラッシュしますが、デバッグ モードのみです。そして、このOPはグーグルのトップアンサーでした。

AFX_WM_CHANGING_ACTIVE_TABは、実際のタブ変更のにイベントをキャッチしているように見えるため、OP で機能しなかった理由は次のとおりです。

int iCheckActiveTab = m_wndTabs.GetActiveTab();
于 2017-08-24T10:55:17.060 に答える