[C++] Getwindowtext wil niet meewerken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
Hallo,

Ik ben bezig om een progje te maken om lompe ASCII over rs232 te verzenden, maar daarvoor moet ik eerst het maken van een API onder de knie krijgen.
Dus na een tutorialtje of wat en wat hulp ben ik in staat geweest om het volgende te produceren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <windows.h>
#include <string.h>
#include <iostream.h>
#include "main.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

static char gszClassName[]  = "db";
static HINSTANCE ghInstance = NULL;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
       WNDCLASSEX WndClass;
       HWND hwnd;
       MSG Msg;

       ghInstance = hInstance;

       WndClass.cbSize        = sizeof(WNDCLASSEX);
       WndClass.style         = NULL;
       WndClass.lpfnWndProc   = WndProc;
       WndClass.cbClsExtra    = 0;
       WndClass.cbWndExtra    = 0;
       WndClass.hInstance     = ghInstance;
       WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
       WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
       WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
       WndClass.lpszMenuName  = "ID_MENU";
       WndClass.lpszClassName = gszClassName;
       WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

       if(!RegisterClassEx(&WndClass)) {
               MessageBox(0, "Window Registration Failed!", "Error!", MB_ICONSTOP | MB_OK);
               return 0;
       }

       hwnd = CreateWindowEx(
               WS_EX_STATICEDGE,
               gszClassName,
               "Serial Tool 1.0",
               WS_OVERLAPPEDWINDOW,
               CW_USEDEFAULT, CW_USEDEFAULT,
               320, 240,
               NULL, NULL,
               ghInstance,
               NULL);

       if(hwnd == NULL) {
               MessageBox(0, "Window Creation Failed!", "Error!", MB_ICONSTOP | MB_OK);
               return 0;
       }

       ShowWindow(hwnd, nCmdShow);
       UpdateWindow(hwnd);

       while(GetMessage(&Msg, NULL, 0, 0)) {
               TranslateMessage(&Msg);
               DispatchMessage(&Msg);
       }
       return Msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    HWND hButton, hInput, hStatus;
    //TCHAR text[10];
    LPSTR text;
     text = (LPSTR)GlobalAlloc(GPTR, 10);
    //strcpy(text, "test");
    
    switch(Message) {
        case WM_CREATE:
                     hButton = CreateWindowEx(NULL,
                               "Button",
                               "Send!",
                               WS_BORDER | WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                               10, 45,
                               120, 30,
                               hwnd, (HMENU)ID_SEND_BUTTON,
                               ghInstance,
                               NULL);
                    hInput = CreateWindowEx(NULL,
                               "Edit",
                               "Field",
                               ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE,
                               10, 10,
                               120, 20,
                               hwnd, (HMENU)ID_INPUT_FIELD,
                               ghInstance,
                               NULL);
                  break;
               case WM_CLOSE:
                       DestroyWindow(hwnd);
                       break;
               case WM_DESTROY:
                       PostQuitMessage(0);
                       break;
               case WM_COMMAND:
                       switch(LOWORD(wParam)) {
                               case ID_SEND_BUTTON:
                                    MessageBox(hwnd, text, "Sended!", 0);
                                    SendMessage(hInput, WM_GETTEXT, 0, (LPARAM)text);
                                    MessageBox(hwnd, text, "Data!", 0);
                                     break;
                               case ID_FILE_OPEN:
                                       MessageBox(hwnd, "Open File...", "Open", 0);
                                       break;
                               case ID_FILE_SAVE:
                                       MessageBox(hwnd, "Save...", "Save", 0);
                                       break;
                               case ID_FILE_EXIT:
                                       PostQuitMessage(0);
                               case ID_OPEN_OPTIONS:
                                       MessageBox(hwnd, "Open...", "Open", 0);
                                       break;
                               case ID_OPEN_HELP:
                                       MessageBox(hwnd, "Help me!", "Help", 0);
                                       break;
                               case ID_HELP_ABOUT:
                                       MessageBox(hwnd, "About Serial Tool", "About", 0);
                                       break;
                       }
                       break;
               default:
                       return DefWindowProc(hwnd, Message, wParam, lParam);
       }
       return 0;
}

Naja, verder nog de gebruikelijke defs en een .rc file voor het menu.
Nu het probleem, als ik dit dingetje compile krijg ik ongeveer wat ik verwacht, textveldje met daaronder een button. Als ik op deze button klik krijg ik eerst een lege message box: dit klopt, daarna krijg ik weer een lege: dit klopt niet, mijn bedoeling is namelijk om de tekst die in het textveldje staan in die messagebox te krijgen. Later doel is natuurlijk in een aantal van dit soor boxes data en instellingen voor de com poort op te slaan, maar da's van latere zorg.

Ik heb vanalles geprobeerd, maar ik krijg gewoon de tekst uit het veldje niet in mijn message box, en ik kan er niet achterkomen waar het foutgaat, iemand een idee?

b.v. _/-\o_

mvg Tom

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
Zoals wel vaker voorkomt los ik mijn eigen probleem op, na even een stapje in de goede richting kwam ik erachter dat de handlers (hInput e.d.) elke keer bij een callback wordten ge re-defined. Ik declareer ze nu eenmalig als global, maar er moet een nettere manier zijn om dit de toen denk ik...

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Je zult als HWND hButton, hInput, hStatus, en text inderdaad in een structure moeten hangen die ergens aan hangt dat de procedure overleeft. Nu zijn het automatic locale variablen.

Een globale stucture werkt het simpelste tot je wat complexere stucturen gewend bent. (hier gaan mensen me over slaan 8)7 , die geleerd hebben dat globale variablen slecht zijn...)

Je kunt ze ook static maken

zoek woorden:

scope (van een variable)
Storage duration specifiers

verder een c boek:
http://publications.gbdir...ions_and_definitions.html

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

In het geval van simpele datatypes (zoals die van de TS) is er geen echt bezwaar tegen globals, dus dat is echt geen probleem hier :)

ik zie wel een allocation function die nooit free-d, ie; een memory leak.

-niks-


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
MLM schreef op zondag 28 december 2008 @ 12:10:
In het geval van simpele datatypes (zoals die van de TS) is er geen echt bezwaar tegen globals, dus dat is echt geen probleem hier :)

ik zie wel een allocation function die nooit free-d, ie; een memory leak.
Ook simpele globals zorgen voor een chaos als je er maar genoeg van hebt. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
Allocation functie is al wat aangepast (weggehaald en gewone TCHAR ingehangen), handlers zijn nu statics. Ik denk dat ik er straks maar een struct of class aan vast knoop aangezien er straks meer velden e.d. zullen zijn en er meer variabelen aan elk van die worden gekoppeld.

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

farlane schreef op zondag 28 december 2008 @ 13:24:
[...]


Ook simpele globals zorgen voor een chaos als je er maar genoeg van hebt. :)
Dat is hetzelfde als zeggen dat je project een chaos word als je maar genoeg code hebt. Structureren is het keyword :P Of je dat nou doet met globals, statics of een implementatie van een singleton, maakt niet echt uit, als je het verkeerd doet, word het toch wel een chaos :P

Er is wmb maar 1 geldige reden tegen globals, je kan de initializatie en opruim volgorde niet bepalen. Voor simpele types (zonder constructor), maakt dat weinig uit :P

-niks-


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
Maar even weer een nieuw probleem aan jullie presenteren, ik krijg het namelijk niet voor elkaar een statusbar te maken in mijn programmaatje. Code voor statusbar als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
statusbar.handler = CreateWindowEx(NULL,
                                STATUSCLASSNAME,
                                "Status..",
                                WS_CHILD | WS_VISIBLE,
                                10, 100, 200, 20,
                                hwnd, (HMENU)ID_STATUS_BAR,
                                ghInstance,
                                NULL);
                    if(statusbar.handler == NULL) {
                         MessageBox(hwnd, "Error!", "Damn!", MB_ICONEXCLAMATION);  
                    }

en hij geeft via de messagebox aan dat het niet lukt, en er is ook geen statusbar te zien, iemand misschien enig idee wat er precies misgaat?

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
Ik ben mijn eigen problemen weer aan het oplossen, InitCommonControls aanroepen is verstandig.. Moest nog wel ff linker toevoegen maargoed, het werkt nu.

nog 2 lompe vraagjes
1: ik kan met dev-c++ makkelijk een icoontje toevoegen aan het programma echter, het icoontje linksboven en bij alt+tab is zo'n lelijk standaard ding en niet mijn ingestelde, hoe krijg ik dat voor mooi voor elkaar?
2: ik wordt schijtziek van dev-c++, ik gebruik liever crimson editor, maar hoe compile ik dan de boel makkelijk, ik vermoedt iets van een makefile oid?

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

pcnerd schreef op zondag 28 december 2008 @ 22:53:
nog 2 lompe vraagjes
1: ik kan met dev-c++ makkelijk een icoontje toevoegen aan het programma echter, het icoontje linksboven en bij alt+tab is zo'n lelijk standaard ding en niet mijn ingestelde, hoe krijg ik dat voor mooi voor elkaar?
2: ik wordt schijtziek van dev-c++, ik gebruik liever crimson editor, maar hoe compile ik dan de boel makkelijk, ik vermoedt iets van een makefile oid?
1.Eerste goede icoontje in de resouce(laagste id) dat je defineerd dacht ik hoor.
2.Makefile moet je vanaf scratch bouwen (vc6 kon hem nog voor je genereren...)... vervelende klus.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
1. Ik volg het half, hoe definieer ik precies dat hij een bepaald bestand daarvoor moet gebruiken?

2.Er zitten bij de projecten van dev cpp wel makefiles bij, is het niet mogelijk om deze tegebruiken? ik bedoel, voor het compilen van de programmatuur van m'n microcontrollers (AVR's) gebruik ik ook een makefile, en deze kan ik gewoon c/p'en als ik weer een nieuw project begin, zelfde idee hier mogelijk?

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Waarom download je niet de Visual Studio Express C++ ?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

pcnerd schreef op maandag 29 december 2008 @ 00:29:
1. Ik volg het half, hoe definieer ik precies dat hij een bepaald bestand daarvoor moet gebruiken?

2.Er zitten bij de projecten van dev cpp wel makefiles bij, is het niet mogelijk om deze tegebruiken? ik bedoel, voor het compilen van de programmatuur van m'n microcontrollers (AVR's) gebruik ik ook een makefile, en deze kan ik gewoon c/p'en als ik weer een nieuw project begin, zelfde idee hier mogelijk?
1. Je "linkt" de ico file met de resource compiler er in. ik ken dev++ niet echt.
2. Ja.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
MLM schreef op zondag 28 december 2008 @ 16:03:
Dat is hetzelfde als zeggen dat je project een chaos word als je maar genoeg code hebt. Structureren is het keyword :P Of je dat nou doet met globals, statics of een implementatie van een singleton, maakt niet echt uit, als je het verkeerd doet, word het toch wel een chaos :P

Er is wmb maar 1 geldige reden tegen globals, je kan de initializatie en opruim volgorde niet bepalen. Voor simpele types (zonder constructor), maakt dat weinig uit :P
Er is nog een andere reden tegen globals en dat is dat elke functie bij die globals kan. Dat werkt dan weer in de hand dat functies die globals gaan gebruiken ipv parameters en dat werkt dan weer copy-paste programmeren in de hand etc etc.

Maar in principe hen je natuurlijk wel gelijk, als je het met verstand doet is er niets tegen het gebruik van globals.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • pcnerd
  • Registratie: April 2004
  • Laatst online: 13-04-2022
leuk_he schreef op maandag 29 december 2008 @ 01:12:
[...]


1. Je "linkt" de ico file met de resource compiler er in. ik ken dev++ niet echt.
2. Ja.
1. Hoe link ik zoiets in vredesnaam? heb je misschien een voorbeeld?
2. Mooi :)

Take a parachute, and jump!


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
pcnerd schreef op zondag 28 december 2008 @ 22:53:
Ik ben mijn eigen problemen weer aan het oplossen, InitCommonControls aanroepen is verstandig.. Moest nog wel ff linker toevoegen maargoed, het werkt nu.

nog 2 lompe vraagjes
1: ik kan met dev-c++ makkelijk een icoontje toevoegen aan het programma echter, het icoontje linksboven en bij alt+tab is zo'n lelijk standaard ding en niet mijn ingestelde, hoe krijg ik dat voor mooi voor elkaar?
2: ik wordt schijtziek van dev-c++, ik gebruik liever crimson editor, maar hoe compile ik dan de boel makkelijk, ik vermoedt iets van een makefile oid?
1: Dat heeft voor zover ik me kan herinneren te maken met de grootte van je icon. Volgens mij moet je in je resource file dan meerdere iconen aanmaken, een 16/16 en een 32x32 icon.

2: De resource file wordt als het goed is meegenomen door Dev-C++, dus die kun je ook in een andere editor aanpassen. Je kunt echter ook vanuit een makefile de resource compiler aanroepen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
leuk_he schreef op zaterdag 27 december 2008 @ 23:22:
Je zult als HWND hButton, hInput, hStatus, en text inderdaad in een structure moeten hangen die ergens aan hangt dat de procedure overleeft. Nu zijn het automatic locale variablen.
En dus? Die variabelen hoeven toch niets te overleven? Je moet ze bewaren als je ze later nodig hebt. Verrassend genoeg is dat zelden het geval. Zo krijg je van de common contols de HWND in elke WM_NOTIFY, samen met (de door jou gekozen) ID. En als je die HWND direct wil, dan gebruik je HWND GetDlgItem(parent, ID).

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1