Avatar billede kim_hyldgaard Nybegynder
22. november 2004 - 12:52 Der er 9 kommentarer og
1 løsning

CView opdatering fra extern process i MS Visual C++

Jeg har et simpelt MFC program. I dette program opretter jeg en ekstra process, som hvert sekund læser fra COM porten, og opdaterer en database med det læste.

Men hvordan 'trigger' jeg en opdatering af mit CView object?
Normalt kan man jo gøre det simpelt fra CDoc, men denne eksterne process har jo ikke adgang til update-håndtagene...

(Jeg har prøvet den grimme løsning med en global pointer til CDoc, men denne giver en assert fejl... - ikke overraskende... ;-D )

Så altså: En måde til at opdatere mit CView object fra en extern process...
Avatar billede bertelbrander Novice
22. november 2004 - 20:14 #1
Du bør bruge PostThreadMessage til at sende en besked fra din "extra process" til din hoved process, som så opdaterer dit view i event handleren:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/postthreadmessage.asp
Avatar billede kim_hyldgaard Nybegynder
25. november 2004 - 07:02 #2
Jeps, det var jeg også kommet frem til...
Men så strander jeg lidt på modtagelsen af beskeden, da WaitForSingleObject "låser" mit program. Dvs. jeg kan ikke minimere/maksimere mit vindue, vælge menupunkter mv.

Modtagelsen af beskeden skulle gerne virke som en aktivering af et menu-punkt. Altså eksekvering af koden idet beskeden ankommer istedet for at hænge programmet indtil beskeden ankommer...
Avatar billede bertelbrander Novice
25. november 2004 - 19:33 #3
Du kan bruge RegisterWindowMessage til at lave en message id og ON_REGISTERED_MESSAGE til at fange beskeden (som alle andre beskeder).

Vær dog opmærksom at hvis du har en modal dialogbox kørende når beskeden bliver modtaget vil den forsvinde. Så er der ikke andre måder at fange beskeden på end at instalere en message hook, se SetWindowsHookEx().

Skal beskeden sendes fra en anden process (dvs et andet program) eller en anden tråd i det samme program ?
Avatar billede bertelbrander Novice
25. november 2004 - 23:21 #4
Jeg lavede lige et simpelt eksempel:
http://home20.inet.tele.dk/midgaard/ng69.zip

Bemærk at det er ON_REGISTERED_THREAD_MESSAGE der skal bruges.
Avatar billede kim_hyldgaard Nybegynder
26. november 2004 - 12:53 #5
Tak - jeg kigger på dit eksempel.
FYI: Det er en tråd i samme program - denne anden tråd er en timer process der kører ret ofte, så jeg må nok kigge nærmere på SetWindowsHookEx()...
Avatar billede kim_hyldgaard Nybegynder
28. november 2004 - 14:02 #6
Så har jeg fået kigget... Tak for hjælpen...
Du må lige kaste et svar hvis du vil ha' point...
Avatar billede bertelbrander Novice
28. november 2004 - 15:19 #7
Jeg lavede en version af programmet der bruger SetWindwosHookEx, men jeg kan ikke uploade til min hjemmeside i øjeblikket, send mig en mail hvis jeg skal sende den til dig.

Jeg samler ikke på point.
Avatar billede kim_hyldgaard Nybegynder
29. november 2004 - 17:03 #8
OK - den vil jeg gerne se... Sender en mail...
Avatar billede bertelbrander Novice
29. november 2004 - 20:53 #9
Mail sendt.
Jeg fik styr på mit internet igen, så her er den, hvis der er andre der vil se:

http://home20.inet.tele.dk/midgaard/ng69.2.zip
Avatar billede kim_hyldgaard Nybegynder
25. august 2010 - 13:17 #10
Lukker punktet...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester