Avatar billede viht Nybegynder
09. oktober 2002 - 23:26 Der er 26 kommentarer og
1 løsning

Opdatere tekst i et window fra et andet program.

Jeg er næsten lige begyndt på windows programmering, og jeg vil gerne sende strenge til et vindue fra en anden applikation.

Mit hovedvindue har et child window som gerne vil kunne appende tekst til fra et andet program, altså et helt andet stykke c++ kode, der kører for sig.

Hvilken message løkke bliver det opfanget i (jeg regner med hovedvinduets), og hvordan får jeg beskeden filtreret ud i switch'en/hvordan skal SendMessage kaldet fra den anden applikation se ud?

Jeg sender med glæde koden til en der vil hjælpe og ikke forstår spørgsmålet 100% :o)
Avatar billede soreno Praktikant
09. oktober 2002 - 23:46 #1
The SetDlgItemText function sets the title or text of a control in a dialog box.
BOOL SetDlgItemText(
    HWND hDlg,    // handle of dialog box
    int nIDDlgItem,    // identifier of control
    LPCTSTR lpString     // text to set
  );   

dvs. du skal have et hwnd til den dialog hvor kontrollen findes + du skal identificere hvilken kontrol der skal sættes tekst på, eks:

SetDlgItemText(ghWnd_info, ID_DIALOG_INFO_INFO, "Data genereres - vent et øjeblik..");
hvor ghWnd_info er en global variabel til en dialog og
ID_DIALOG_INFO_INFO er det tekst felt som der skal sættes tekst på.

men det kræver jo at du ved hvilket id kontrollen har og at du kan fremskaffe et hwnd til vinduet. jeg er ikke lige klar over hvordan du på en nem måde kan få fat i hwnd til det pågændende vindue ?

iøvrigt kan jeg anbefale denne side:
http://www.winprog.org/tutorial/
Avatar billede jpk Nybegynder
10. oktober 2002 - 08:52 #2
Jeg har lavet et lille program, der lader dig vælge et vindue i et andet program og ændre teksten der. Måske er det sådan noget du er ude efter?
Programmet anvender MFC...
Hvis du er interesseret, kan jeg maile dig koden/exe-filen.
Avatar billede viht Nybegynder
10. oktober 2002 - 09:09 #3
Jeg vil helst ikke bruge MFC, ellers tak :)

Jeg har forstået at jeg kan bruge GetDlgItem(HWND hwnd, <ID>) til at få fat i en control. Men hvordan får jeg overført min hwnd variabel til en anden klasse nemmest?
Avatar billede viht Nybegynder
10. oktober 2002 - 09:31 #4
Jeg har en klasse UDPClient der tager (HWND hwnd) i constructor'en. Jeg har lavet en UDPClient.h, som min win32 gui klasse #includer. Jeg skriver så i GUI klassen: UDPClient udp = UDPClient(hwnd); - hwnd er initialiseret. Jeg får:
"[Linker Error] undefined reference to 'UDPClient::UDPClient(HWND__*)"

Hvad pokker betyder det?
Jeg bruger Dev-cpp 4.9.6.0
Avatar billede jpk Nybegynder
10. oktober 2002 - 09:58 #5
Hvorfor ikke bare:

UDPClient udp(hwnd);
Avatar billede viht Nybegynder
10. oktober 2002 - 10:00 #6
Har jeg også prøvet, det giver samme fejl. Dette er hvad der står i min UDPClient.h:
UDPClient(HWND &hwnd);
Avatar billede jpk Nybegynder
10. oktober 2002 - 10:10 #7
Jeg kender ikke Dev-cpp og dermed ikke compilerfejlene...
Har du husket at include UDPClient.h i UDPClient.cpp?
Avatar billede jpk Nybegynder
10. oktober 2002 - 10:13 #8
Er filerne UDPClient.h og UDPClient.cpp tilføjet til dit projekt?
Avatar billede viht Nybegynder
10. oktober 2002 - 10:24 #9
UDPClient.h var ikke #include't i i UDPClient.cpp.. giv mig lige 10min
Avatar billede viht Nybegynder
10. oktober 2002 - 10:37 #10
Så.. nu er den includet begge steder.
UDPClient.h:
    UDPClient(HWND &hwnd);
UDPClient.cpp:
    UDPClient::UDPClient(HWND &hwnd) {
   
        WORD wVersionRequested = MAKEWORD(1,1);
        WSADATA wsaData;
        HWND test = hwnd;
        ....
        ....   
        cout << "Socket binded" << endl;
    }

Fejlen er stadig den samme:
Kalder: UDPClient udp(hwnd); fra: en win32 metode
Får fejlen:
[Linker error] undefined reference to `UDPClient::UDPClient(HWND__ *&)'
Avatar billede jpk Nybegynder
10. oktober 2002 - 10:44 #11
Du har ikke UDPClient liggende i en separat dll, vel?
Avatar billede viht Nybegynder
10. oktober 2002 - 10:51 #12
nej.. det er en exe.
Avatar billede jpk Nybegynder
10. oktober 2002 - 10:58 #13
Har du ikke en manual/brugervejledning til compileren, så du kan se hvad de forskellige fejl betyder og hvad de typisk skyldes?

En bemærkning:
exe = exekverbar fil
en dll er også en exekverbar fil
Avatar billede viht Nybegynder
10. oktober 2002 - 11:02 #14
Jeg har ledt og ledt.. det er en linker fejl, som den jo skriver. Jeg ved bare ikke hvordan jeg udbedrer den. Og med exe mente jeg den er en .exe.
Avatar billede jpk Nybegynder
10. oktober 2002 - 11:05 #15
Du kan sende mig koden, så skal jeg se om jeg får tid...
Avatar billede jpk Nybegynder
10. oktober 2002 - 11:05 #16
jacpost@post6.tele.dk
Avatar billede soreno Praktikant
10. oktober 2002 - 11:34 #17
fejlen skyldes du ikke linker til de rigtige libs - prøv at få dev-cpp til at generere en makefile og post den her.
Avatar billede jpk Nybegynder
10. oktober 2002 - 11:36 #18
Efter et par småjusteringer, compiler det fint hos mig...
linker du med Ws2_32.lib?
Avatar billede soreno Praktikant
10. oktober 2002 - 11:47 #19
som hedder libws2_32.a når vi snakker mingw (dev-cpp) :-)
Avatar billede viht Nybegynder
10. oktober 2002 - 11:53 #20
Jeg har fundet filen.. men hvor linker jeg den? Jeg har arbejdet med Winsock før.. og der skulle jeg tilføje -lwsock32 til feltet under "Add the following commands when calling compiler"
Jeg har prøvet at tilføje -libws2_32 der.. det virker dog ikke.
Avatar billede soreno Praktikant
10. oktober 2002 - 11:58 #21
et eller andet sted i project options kan man vælge hvilke libs man vil linke med (i dev-cpp skal man lige vælge .a som filfilter ellers finder man ikke noget anvendeligt - jeg er ikke klar over om det er ændret i nyere verisoner)
Avatar billede soreno Praktikant
10. oktober 2002 - 11:59 #22
forresten skal du jo også skrive:
-lws2_32
Avatar billede viht Nybegynder
10. oktober 2002 - 12:05 #23
Der er to steder du kan linke Libs. Det ene er Tools -> Compiler Options.
Det andet er Højrklik på projektet -> projekt options. Jeg har tilføjet -lws2_32 begge steder endda i begge projects. Det virker stadig ikke :(
Avatar billede viht Nybegynder
10. oktober 2002 - 12:22 #24
hvilke småjusteringer gjorde du og hvilket miljø bruger du?
Avatar billede jpk Nybegynder
10. oktober 2002 - 12:47 #25
Jeg bruger MS Visual C++ 6.0
Jeg linkede med Ws2_32.lib

+ et par andre ting, som fx #include <iostream.h> i UDPClient.cpp for at kunne bruge cout, endl osv.

Jeg fjernede desuden #include <winsock2.h> fra Editor.cpp fordi den gav en masse redifinition-errors

Så ændrede jeg selvfølgelig REMOTE_HOST til min egen maskines navn, for at få programmet til at køre...
Avatar billede viht Nybegynder
10. oktober 2002 - 14:08 #26
Det blev ikke løst.. også selvom jeg linker ws2_32.a.
Avatar billede viht Nybegynder
05. november 2002 - 16:56 #27
lukker
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