Bonjour,
Un thread de communication de données doit notifier un CDocument (qui diffusera l'info vers ses vues par un UpdateAllviews).
J'ai choisi la méthode de créer une fenêtre cachée qui sera notifiée par le thread par un PostMessage.
Dans le traitement du message, une callback de mon document sera appelée.
Voici le code mis en oeuvre pour la définition de la fenêtre cachée
La création de la fenêtre est faite dans le constructeur de mon document (création de fenêtre d'après un exemple trouvé sur le Web) :
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 #define WM_USER_REFRESH_TDB 0x500 // Message signalant à l'IHM qu'il faut rafraichir // l'affichage correspondant au DashBoard static void refreshCallback(LPVOID lpParam, unsigned nbRefresh) { HWND hWindow = (HWND)lpParam; ::PostMessage(hWindow, WM_USER_REFRESH_TDB, nbRefresh, 0); } IMPLEMENT_DYNCREATE(CHiddenWnd, CWnd) BEGIN_MESSAGE_MAP(CHiddenWnd, CWnd) ON_MESSAGE(WM_USER_REFRESH_TDB, OnRefreshDashboard) END_MESSAGE_MAP() LRESULT CHiddenWnd::OnRefreshDashboard(WPARAM wparam, LPARAM lparam /*ignored*/) { m_pDoc->cbDashboardRefresh(wparam); return 0; }
Or celà ne marche pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 m_hiddenWnd.Create( NULL // class name, left MFC invent one , NULL // title, meaningless , WS_CHILD // child window // conspicuous by its absense: // WS_VISIBLE , CRect(0,0,10,10) // useless nonempty rectangle , AfxGetMainWnd() // attach to main window, need someplace , IDC_STATIC); // window ID m_hiddenWnd.m_pDoc = this; // positionnement de la callback de notification d'un rafraichissement du dashboard m_Dashboard.SetRefreshCallback(refreshCallback, m_hiddenWnd.GetSafeHwnd());
Je rentre bien régulièrement dans ma callback de notification dans laquelle je fais le PostMessage mais je ne rentre pas dans la routine de traitement du message (OnRefreshDashboard).
Il me semble l'avoir vu marché hier-soir sur mon PC perso. Mais ce matin sur mon PC pro, impossible de le faire tourner ...
J'utilise Visual C++2005 (sur mes deux PC).
Quelqu'un a-t-il une idée ?
Partager