J'ai deux questions sur les MFC, décidément je suis plein de
problèmes ces derniers temps.
Bon je tiens à parler un tout petit peu de l'architecture de mon
programme avant. Rien d'extraordinaire, une doc, des views
associés, et à côté de ça je lance un thread. Ce thread a des
impacts sur mon doc, il renseigne régulièrement des variables
qui s'y trouvent.
Maintenant j'ai deux questions.
1) Quand je fais un pDoc->UpdateAllViews(NULL) depuis
une de mes views, pas de problème. Par contre, si je l'appelle
depuis mon thread séparé, j'ai un "Debug Assertion Failed".
Voici le stacktrace si ça peut aider :
- mfc71d.dll!CWnd::AssertValid() Ligne 888 + 0x43 C++
- mfc71d.dll!CCtrlView::AssertValid() Ligne 563 C++
- WinTrace.exe!CListe::AssertValid() Ligne 25 C++
- mfc71d.dll!AfxAssertValidObject ...
- mfc71d.dll!CDocument::UpdateAllViews ...
Pour info, le pointeur vers pDoc et le même que ça soit dans
mon thread que dans mes views, j'ai vérifié sa valeur et il n'y
a aucun problème.
2) Dans une TreeView et une ListView, est-il possible de
spécifier une couleur spéciale pour un certain item ? Si oui,
bien sur, comment ? :)
Je vous remercie beaucoup, surtout surtout sur la 1ère
question car ça me bloque vraiment dans ma progression,
sinon la deuxième question je trouverai ça génial si il y
avait un moyen pas compliqué (sans recoder ou modifier
un widget...).
"Patrick Philippot" a écrit dans le message de news: d3bc04$1tfr$
TigrouMeow wrote:
Y'a forcément un truc qui ne vas pas, surtout que vous me dites que je peux passer mes objects en paramètres, mais QUEL paramètre? Je n'ai aucun paramètre sur mes fonctions qui sont censés réceptionner mes messages... c'est des afx_msg void ReceiveMSG(). Si par malheur je met deux paramètres WPARAM et LPARAM, là le compilo n'aime pas du tout.
Regardez dans MTRECALC. Le message privé est réceptionné dans la vue en surchargeant OnMessage (macro ON_MESSAGE) et ce handler accepte bien un WPARAM et un LPARAM).
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage, et je le recevais pas. Là d'un coup ça m'a débloqué, et j'arrive à tout faire comme je veux sans problème :) Donc vraiment merci beaucoup pour votre patience, ça m'a rendu un grand service.
Par contre ma question sur les items est toujours valable :) Ca serait super bien que je puisse colorer certains de mes items dans la ListView (colorisation selon le type d'item) et dans la TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous pouvez encore m'aider... je pense que si il y a une solution ça sera moins chaotique à mettre en oeuvre pour moi ;)
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: d3bc04$1tfr$1@biggoron.nerim.net...
TigrouMeow wrote:
Y'a forcément un truc qui ne vas pas, surtout que vous me dites que
je peux passer mes objects en paramètres, mais QUEL paramètre?
Je n'ai aucun paramètre sur mes fonctions qui sont censés
réceptionner mes messages... c'est des afx_msg void ReceiveMSG().
Si par malheur je met deux paramètres WPARAM et LPARAM, là
le compilo n'aime pas du tout.
Regardez dans MTRECALC. Le message privé est réceptionné dans la vue en
surchargeant OnMessage (macro ON_MESSAGE) et ce handler accepte bien un
WPARAM et un LPARAM).
Je vous aurais beaucoup embété mais j'ai réussi !
En fait je faisais un PostMessage au lieu d'un SendMessage, et
je le recevais pas. Là d'un coup ça m'a débloqué, et j'arrive à
tout faire comme je veux sans problème :) Donc vraiment merci
beaucoup pour votre patience, ça m'a rendu un grand service.
Par contre ma question sur les items est toujours valable :)
Ca serait super bien que je puisse colorer certains de mes items
dans la ListView (colorisation selon le type d'item) et dans la
TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous
pouvez encore m'aider... je pense que si il y a une solution ça
sera moins chaotique à mettre en oeuvre pour moi ;)
"Patrick Philippot" a écrit dans le message de news: d3bc04$1tfr$
TigrouMeow wrote:
Y'a forcément un truc qui ne vas pas, surtout que vous me dites que je peux passer mes objects en paramètres, mais QUEL paramètre? Je n'ai aucun paramètre sur mes fonctions qui sont censés réceptionner mes messages... c'est des afx_msg void ReceiveMSG(). Si par malheur je met deux paramètres WPARAM et LPARAM, là le compilo n'aime pas du tout.
Regardez dans MTRECALC. Le message privé est réceptionné dans la vue en surchargeant OnMessage (macro ON_MESSAGE) et ce handler accepte bien un WPARAM et un LPARAM).
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage, et je le recevais pas. Là d'un coup ça m'a débloqué, et j'arrive à tout faire comme je veux sans problème :) Donc vraiment merci beaucoup pour votre patience, ça m'a rendu un grand service.
Par contre ma question sur les items est toujours valable :) Ca serait super bien que je puisse colorer certains de mes items dans la ListView (colorisation selon le type d'item) et dans la TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous pouvez encore m'aider... je pense que si il y a une solution ça sera moins chaotique à mettre en oeuvre pour moi ;)
Patrick Philippot
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous restez sur le même thread.
Par contre ma question sur les items est toujours valable :) Ca serait super bien que je puisse colorer certains de mes items dans la ListView (colorisation selon le type d'item) et dans la TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous pouvez encore m'aider... je pense que si il y a une solution ça sera moins chaotique à mettre en oeuvre pour moi ;)
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi !
En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous
restez sur le même thread.
Par contre ma question sur les items est toujours valable :)
Ca serait super bien que je puisse colorer certains de mes items
dans la ListView (colorisation selon le type d'item) et dans la
TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous
pouvez encore m'aider... je pense que si il y a une solution ça
sera moins chaotique à mettre en oeuvre pour moi ;)
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous restez sur le même thread.
Par contre ma question sur les items est toujours valable :) Ca serait super bien que je puisse colorer certains de mes items dans la ListView (colorisation selon le type d'item) et dans la TreeView (mise en gras pour indiquer "l'arrivée" d'items). Si vous pouvez encore m'aider... je pense que si il y a une solution ça sera moins chaotique à mettre en oeuvre pour moi ;)
"Patrick Philippot" a écrit dans le message de news: d3bfvh$21kv$
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous restez sur le même thread.
Oui mais pourtant... ça marche niquel ! Je travaille avec le handle de la fenêtre par contre, donc c'est peut-être ça !
TigrouMeow
"Patrick Philippot" a écrit dans le message de news: d3bfvh$21kv$
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous restez sur le même thread.
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ? Pourquoi pensez vous que ça marche chez moi ?
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: d3bfvh$21kv$1@biggoron.nerim.net...
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi !
En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous
restez sur le même thread.
J'utilise Post selon votre conseil maintenant.
Par contre pour moi l'un ou l'autre ça ne change rien, les deux
fonctionnent.
Quel est la différence ? Pourquoi pensez vous que ça marche chez moi ?
"Patrick Philippot" a écrit dans le message de news: d3bfvh$21kv$
TigrouMeow wrote:
Je vous aurais beaucoup embété mais j'ai réussi ! En fait je faisais un PostMessage au lieu d'un SendMessage,
J'avais bien dit *poster* :-) . Un SendMessage est synchrone, donc vous restez sur le même thread.
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ? Pourquoi pensez vous que ça marche chez moi ?
Patrick Philippot
TigrouMeow wrote:
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque le message a été traité dans la window procedure de la fenêtre cible. Un PostMessage est asynchrone. La fonction revient immédiatement après avoir placé le message dans la file d'attente adéquate. Le message est traité plus tard, lorsque son tour arrive. Donc si le PostMessage est fait sur un thread différent du thread qui traite la boucle de message, le problème évoqué plus haut concernant les threads MFC ne se pose pas puisque le message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
TigrouMeow wrote:
J'utilise Post selon votre conseil maintenant.
Par contre pour moi l'un ou l'autre ça ne change rien, les deux
fonctionnent.
Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est
synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque
le message a été traité dans la window procedure de la fenêtre cible. Un
PostMessage est asynchrone. La fonction revient immédiatement après
avoir placé le message dans la file d'attente adéquate. Le message est
traité plus tard, lorsque son tour arrive. Donc si le PostMessage est
fait sur un thread différent du thread qui traite la boucle de message,
le problème évoqué plus haut concernant les threads MFC ne se pose pas
puisque le message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque le message a été traité dans la window procedure de la fenêtre cible. Un PostMessage est asynchrone. La fonction revient immédiatement après avoir placé le message dans la file d'attente adéquate. Le message est traité plus tard, lorsque son tour arrive. Donc si le PostMessage est fait sur un thread différent du thread qui traite la boucle de message, le problème évoqué plus haut concernant les threads MFC ne se pose pas puisque le message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
TigrouMeow
"Patrick Philippot" a écrit dans le message de news: d3frkr$lov$
TigrouMeow wrote:
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque le message a été traité dans la window procedure de la fenêtre cible. Un PostMessage est asynchrone. La fonction revient immédiatement après avoir placé le message dans la file d'attente adéquate. Le message est traité plus tard, lorsque son tour arrive. Donc si le PostMessage est fait sur un thread différent du thread qui traite la boucle de message, le problème évoqué plus haut concernant les threads MFC ne se pose pas puisque le message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
Ok merci bien pour cette explication. C'est vrai que c'est bizarre que le SendMessage fonctionne dans mon programme. Si vous le souhaitez je peux vous envoyer mon coe si ça vous interresse :)
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: d3frkr$lov$1@biggoron.nerim.net...
TigrouMeow wrote:
J'utilise Post selon votre conseil maintenant.
Par contre pour moi l'un ou l'autre ça ne change rien, les deux
fonctionnent.
Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque le
message a été traité dans la window procedure de la fenêtre cible. Un
PostMessage est asynchrone. La fonction revient immédiatement après avoir
placé le message dans la file d'attente adéquate. Le message est traité
plus tard, lorsque son tour arrive. Donc si le PostMessage est fait sur un
thread différent du thread qui traite la boucle de message, le problème
évoqué plus haut concernant les threads MFC ne se pose pas puisque le
message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
Ok merci bien pour cette explication. C'est vrai que c'est bizarre que
le SendMessage fonctionne dans mon programme. Si vous le souhaitez
je peux vous envoyer mon coe si ça vous interresse :)
"Patrick Philippot" a écrit dans le message de news: d3frkr$lov$
TigrouMeow wrote:
J'utilise Post selon votre conseil maintenant. Par contre pour moi l'un ou l'autre ça ne change rien, les deux fonctionnent. Quel est la différence ?
Je vous l'ai expliqué dans un autre message: un SendMessage est synchrone.
Si ça ne vous parle pas: un appel à SendMessage ne retourne que lorsque le message a été traité dans la window procedure de la fenêtre cible. Un PostMessage est asynchrone. La fonction revient immédiatement après avoir placé le message dans la file d'attente adéquate. Le message est traité plus tard, lorsque son tour arrive. Donc si le PostMessage est fait sur un thread différent du thread qui traite la boucle de message, le problème évoqué plus haut concernant les threads MFC ne se pose pas puisque le message est bien traité par le thread qui a créé la fenêtre.
Pourquoi pensez vous que ça marche chez moi ?
Je ne sais pas. Il faudrait que j'étudie le code source.
Ok merci bien pour cette explication. C'est vrai que c'est bizarre que le SendMessage fonctionne dans mon programme. Si vous le souhaitez je peux vous envoyer mon coe si ça vous interresse :)