/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Vidersende message / Form i dll
Fra : Rasmus


Dato : 28-04-05 22:02

Hej

Jeg bruger Bcb6.
Jeg har 2 spørgsmål.
Jeg har et program med en VCL form. Jeg vil gerne vidersende alle
messages som kommer til den form til et andet windue.
Jeg vil tro at det skal gøre som noget alla det her, men det
virker ikke:
//global variable
HHOOK AlleMsgs = NULL;

//Når programmet startes
AlleMsgs = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)AlleMsgsProc,NULL,
GetCurrentThreadId());

//Funktion der kaldes når mit program får en msg
LRESULT CALLBACK AlleMsgsProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hwnd=FindWindow("SEND_VIDRE_TIL_VINDUE",NULL);

MSG *message;
message = (MSG *)lParam;
SendMessage(hwnd,message->message,wParam,lParam);

return CallNextHookEx(AlleMsgs, nCode, wParam,lParam);
}

Hvad er der galt? Skal det gøres på en anden måde?
I øvrigt, WH_GETMESSAGE, vil den også modtage input fra
keyboardet, eller skal jeg bruge WH_KEYBOARD?

Nummer 2.
Hvis jeg laver en Form og lægger den i en dll, og så starter den
sådan (stadig i dll'en):
Application->CreateForm(__classid(TMainForm), &MainForm);
Er den så i et Thread for sig? Eller hvad skal jeg gøre for
at få den til at køre i sit eget (nyt) thread?

På Forhånd Tak!

Mvh. Rasmus Steffensen


 
 
Mogens Hansen (29-04-2005)
Kommentar
Fra : Mogens Hansen


Dato : 29-04-05 05:16

>
> "Rasmus" <fsim@ofir.dk> wrote in message
> news:1114722139.323411.152260@g14g2000cwa.googlegroups.com...
> Hej
>
> Jeg bruger Bcb6.
> Jeg har 2 spørgsmål.
> Jeg har et program med en VCL form. Jeg vil gerne vidersende alle
> messages som kommer til den form til et andet windue.

Hvilket problem prøver du at løse ?

> Jeg vil tro at det skal gøre som noget alla det her, men det
> virker ikke:

Som oftest har man ikke brug for at arbejde på Win32 API niveau når man
bruger VCL.

[8<8<8<]
> Hvis jeg laver en Form og lægger den i en dll, og så starter den
> sådan (stadig i dll'en):
> Application->CreateForm(__classid(TMainForm), &MainForm);
> Er den så i et Thread for sig?

Nej - heldigvis.

> Eller hvad skal jeg gøre for
> at få den til at køre i sit eget (nyt) thread?

Almindeligvis er man bedst tjent med at lave hele brugerfladen køre i een
tråd, og så eventuelt have andre tråde som er uafhængige af brugerfladen
lave det andet arbejde, og så synkroniser med funktionen
TThread::Synchronize.

Hvilket problem prøver du at løse ?

Venlig hilsen

Mogens Hansen



Rasmus (30-04-2005)
Kommentar
Fra : Rasmus


Dato : 30-04-05 10:53

Hej

Problem 1.
>>Hvilket problem prøver du at løse?
Min form kører i forgrunden af et computerspil. Når min form har
focus, så sendes
keyboard input til min form og ikke spillet. Derfor skal alt keyboard
input sendt til min
form sendes videre til spillet window handle.

Problem 2.
Samme modul som i problem 1. Når mit program laver en række
udregninger,
stopper computerspillets grafikmotor mens mine regne funktion udføres.
Så vil bare
have min form til at køre i et andet thread end spillets.

Mvh. Rasmus


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste