Impec' MERCI
![]()
Une troisième version
Inclure les headers files
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 BOOL CMyProjectApp::InitInstance() { //... PreProcess(); return TRUE; } void CMyProjectApp::PreProcess() { CMainFrame* pMainFrame = static_cast <CMainFrame*>(m_pMainWnd); pMainFrame->Run(); } void CMainFrame::Run() { SetTimer(1, 2000, NULL); } void CMainFrame::OnTimer(UINT nIDEvent) { CChildFrame* pChildFrame = NULL; pChildFrame = static_cast<CChildFrame*>( GetActiveFrame() ); CMyProjectDoc* pDoc = static_cast<CMyProjectDoc*>( pChildFrame->GetActiveDocument() ); if(pDoc && pDoc->IsKindOf( RUNTIME_CLASS( CMyProjectDoc ) ) ) { TRACE("je suis ici après 2 secondes\n"); // au boulot ... } KillTimer(1); // garantit un unique appel à OnTimer CMDIFrameWnd::OnTimer(nIDEvent); }
#include "MyProjectDoc.h"
#include "ChildFrm.h"
dans MainFrm.cpp
On donne juste deux secondes ou moin à l'application de terminer sa procédure d'initialisation dans InitInstance()
Et on travaille dans CMainFrame::OnTimer qui est appelé une fois
Quelle est la subtile différence par rapport à l'autre version?
J'ai compris un peu je crois (en me grattant frénétiquement le crâne pendant 15-20 minutes!!) :
Le programme commencerait par InitInstance et quand le menu est créé par IniInstance, alors il appelle automatiquement la fonction liée au message d'événement WM_TIMER OnTimer() et il fait ce qu'ila à faire puis on Kill le Timer qui ne sert qu'une fois.
: Le timer déclenché sert à occuper InitInstance pendant que la fonction OnTimer travaille, c'est ça?
Et comme ça on est sûr (si on admet qu'on est sûr que 2 secondes est suffisant) que quand on sort d'InitInstance tout est prêt.:
Partager