Bonjour,
J'intègre les nouvelles MFC dans mon appli.
J'utilise CMFCTabCtrl pour gérer les différents onglets d'une dialogue. Pouvez-vous me dire quel événement faut il intercepter pour détecter le changement d'onglet (de tab).
Merci
Version imprimable
Bonjour,
J'intègre les nouvelles MFC dans mon appli.
J'utilise CMFCTabCtrl pour gérer les différents onglets d'une dialogue. Pouvez-vous me dire quel événement faut il intercepter pour détecter le changement d'onglet (de tab).
Merci
salut,
le changement de tab declenche deux méthodes:
FireChangeActiveTab et FireChangingActiveTab
ces deux méthodes envoies à la fenêtre parent les messages :
AFX_WM_CHANGE_ACTIVE_TAB et AFX_WM_CHANGING_ACTIVE_TAB
que tu implementes de cette façon :
Code:
1
2
3 ON_REGISTERED_MESSAGE(AFX_WM_CHANGE_ACTIVE_TAB, OnChangeActiveTab) ON_REGISTERED_MESSAGE(AFX_WM_CHANGING_ACTIVE_TAB, OnChangingActiveTab)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 LRESULT CMyFormView::OnChangeActiveTab(WPARAM wp, LPARAM /*lp*/) { CString str; str.Format (_T("AFX_WM_CHANGE_ACTIVE_TAB: %d"), (int) wp); return 0; } LRESULT CMyFormView::OnChangingActiveTab(WPARAM wp, LPARAM /*lp*/) { CString str; str.Format (_T("AFX_WM_CHANGING_ACTIVE_TAB: %d"), (int) wp); return 0; }
Merci,
:king:
Si ce n'est pas indiscret d'où tiens tu cette info?
J'ai regardé sur MSDN, j'avais pointé la fonction CMFCBaseTabCtrl::FireChangeActiveTab() mais elle n'est pas documentée!
André
je vais chercher directement dans les sources ...
ma méthode:
pour activer un tab on peut utiliser ActiveTab , de la je cherche le code de cette méthode pour voir ce qu'elle fait.
je trouve les méthodes précitées, que je cherche jusqu'à trouver les messages concernés.
il me reste plus qu'a chercher l'utilisation de ces messages , et d'écrire ma réponse pour ce post.;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 void CMFCBaseTabCtrl::FireChangeActiveTab(int nNewTab) { CFrameWnd* pParentFrame = AFXGetTopLevelFrame(this); CWnd* pParent = GetParent(); ASSERT_VALID(pParent); pParent->SendMessage(AFX_WM_CHANGE_ACTIVE_TAB, nNewTab, (LPARAM)this); if (pParent != pParentFrame && pParentFrame != NULL) { ASSERT_VALID(pParentFrame); pParentFrame->SendMessage(AFX_WM_CHANGE_ACTIVE_TAB, nNewTab, (LPARAM)this); } m_bSetActiveTabFired = TRUE; } BOOL CMFCBaseTabCtrl::FireChangingActiveTab(int nNewTab) { CFrameWnd* pParentFrame = AFXGetTopLevelFrame(this); CWnd* pParent = GetParent(); ASSERT_VALID(pParent); BOOL bRes = (BOOL) pParent->SendMessage(AFX_WM_CHANGING_ACTIVE_TAB, nNewTab, (LPARAM)this); if (bRes) { return TRUE; } if (pParent != pParentFrame && pParentFrame != NULL) { ASSERT_VALID(pParentFrame); bRes = (BOOL) pParentFrame->SendMessage(AFX_WM_CHANGING_ACTIVE_TAB, nNewTab, (LPARAM)this); } return bRes; }
Merci, de partager les secrets du Chef
:ave::ave::ave: