Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Frage wegen Beschreibbarkeit bzw. Scrollbar bei Textfeldern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.04.2017, 18:50 Uhr
qwertzui



Ich wollte CPP lernen, und nun bin ich bei meinem ersten Projekt. Mein Ziel ist es, den Text, welcher in eine Textbox eingegeben wird, in einem Textfeld sichtbar zu machen.

Was ich bei folgendem Code, den ich zusammengebastelt habe, nicht verstehe: Wenn ich im unteren Textfeld eine Zeile geschrieben habe, dann kann ich die nächste Zeile nicht beschreiben, d. h. wie kann ich erreichen, dass das Textfeld auf mehreren Zeilen beschrieben werden kann?

Zudem verstehe ich nicht, wieso ich bei der Scrollbar bereits scrollen kann, wenn ich noch gar nichts geschrieben habe. Hier mein Code:


C++:
#include <windows.h>

HWND TextBox, SendButton, TextField;

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {

switch (Message)                  
    {
        case WM_CREATE:


            TextField = CreateWindow("EDIT",
                                     "",
                                     WS_VISIBLE | WS_CHILD | WS_BORDER | ES_READONLY | WS_VSCROLL,
                                     30, 20, 620, 200,
                                     hwnd, (HMENU) 3, NULL, NULL);

            TextField = CreateWindow("EDIT",
                                   "",
                                 WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL,
                                   30, 220, 620, 150,
                                   hwnd, (HMENU) 1, NULL, NULL);
                                    

            
            SendButton = CreateWindow("BUTTON",
                         "Send",
                         WS_VISIBLE | WS_CHILD | WS_BORDER,
                         600, 390, 60, 20,
                         hwnd, (HMENU) 2, NULL, NULL);
                                  
                                    
                                    
            break;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1:
                //Bei Click...
                break;
            }
        break;
        case WM_DESTROY:
            PostQuitMessage (0);      
            break;
        default:                      
            return DefWindowProc (hwnd, Message, wParam, lParam);
    }
    return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    
    WNDCLASSEX wc; /* A properties struct of our window */
    HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
    MSG msg; /* A temporary location for all messages */

    /* zero out the struct and set the stuff we want to modify */
    memset(&wc,0,sizeof(wc));
    
    wc.cbSize         = sizeof(WNDCLASSEX);
    wc.lpfnWndProc     = WndProc; /* This is where we will send messages to */
    wc.hInstance     = hInstance;
    wc.hCursor         = LoadCursor(NULL, IDC_ARROW);
    
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    //wc.lpszMenueName =
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
    wc.hIconSm         = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */

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

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        100, /* x */
        100, /* y */
        700, /* width */
        480, /* height */
        NULL,NULL,hInstance,NULL);

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

    /*
        This is the heart of our program where all input is processed and
        sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
        this loop will not produce unreasonably high CPU usage
    */

    while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
        TranslateMessage(&msg); /* Translate key codes to chars if present */
        DispatchMessage(&msg); /* Send it to WndProc */
    }
    return msg.wParam;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.04.2017, 08:18 Uhr
Tommix



Hallo,
Du mußt bei dwStyle noch ES_MULTILINE hinzufügen.
Allerdings
Zitat:
Ich wollte CPP lernen,...
ist das kein C++ sondern C.

- Tommix

Dieser Post wurde am 10.04.2017 um 08:19 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.04.2017, 10:59 Uhr
qwertzui



Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.04.2017, 11:30 Uhr
ao

(Operator)



Zitat:
Ich wollte CPP lernen, und nun bin ich bei meinem ersten Projekt.


Darf ich fragen, warum du dich entschieden hast, ausgerechnet mit WINAPI anzufangen?
1. ist WINAPI, wie Tommix schon sagte, gar kein C++, sondern C.
2. erwirbst du hier ein Inselwissen, dass nur im Windows-Umfeld zu irgendwas nützlich sein kann, aber nirgendwo sonst. Praktisch alles, was du da geschrieben hast funktioniert nur auf einem Windows-System.
3. ist WINAPI, man kann es nicht anders sagen, total veraltet. Ähnliches gilt für C als Sprache für die Applikationsentwicklung.

Das Argument "ich lerne erst mal die Grundlagen" zieht auch nicht, denn im Jahr 2017 sind das keine Grundlagen mehr, für nichts.

Wenn du C++ lernen willst, dann hat das in den ersten Kapiteln nichts mit Oberflächen-Elementen (Window, Textbox, Button usw.) zu tun, sondern nur mit Programmstrukturen, und Ein- und Ausgaben werden z.B. auf der Konsole oder über Dateien gemacht.

Wenn du Programme mit Oberfläche schreiben willst, dann machst du das besser mit einem modernen Oberflächen-Toolkit (z.B. qt, GTK+, wxWidgets). Allerdings brauchst du hierzu erst mal ein solides Grundwissen in C++. Auch WPF und Swing kommen in Frage, wenn du dir auch C# oder Java als Programmiersprache vorstellen könntest.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.04.2017, 13:05 Uhr
qwertzui



Ich habe in C# und JAVA schon ein Paar wenige Sachen gemacht, daher wollte ich mir mal C++ anschauen. Auf WinAPI bin ich mehr oder weniger durch Zufall gekommen, zumal mir die elementaren Strukturen, Datentypen usw. kein Fremdwort mehr sind.

Was aber mein Interesse geweckt hat, ist qt - das ist dann aber nicht mehr Windowsspezifisch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.04.2017, 15:06 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von qwertzui:
Was aber mein Interesse geweckt hat, ist qt - das ist dann aber nicht mehr Windowsspezifisch?

Nein. Qt wurde entwickelt um von systemspezifischen GUIs wie WinAPI oder X-Window unabhängig zu werden, sodass das GUI für ein Programm nur einmal entwickelt werden muss und dann auf allen gängigen Plattformen, läuft. Das selbe gilt für GTK+, WxWidgets und wie die Toolkits sonstnoch so heissen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.04.2017 um 15:07 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.04.2017, 18:27 Uhr
qwertzui



Ich hatte mir vorhin den Qt-Installer als .exe runtergeladen. Als ich dann Qt installieren wollte hieß es, dass die Komponente ca. 16GiB auf der Festplatte belegen wird. Wieso ist das so groß? Zudem habe ich meine C++-Experimente mit der IDE DevC++ begonnen. Ich weiß nicht, ob ic so ohne weiteres Qt runterladen kann, sodass es dann auch unter DevC++ läuft, daher wollte ich mal fragen, wie ich da am besten vorgehe, was ich unter google bislang dazu gefunden habe, klang kompliziert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.04.2017, 19:21 Uhr
ao

(Operator)


Qt hat eine eigene IDE, den QtCreator, du brauchst also kein DevC++. Du musst nur einen der C++-Compiler installiert haben, mit denen QtCreator zurechtkommt, zum Beispiel den von Microsoft. Steht aber alles auf doc.qt.io unter Getting Started.

Du musst nicht alle Qt-Versionen von 5.0 bis 5.9beta installieren. Es reicht, die neueste zu nehmen, also 5.8 (die 5.9 ist beta, also möglicherweise noch nicht ganz bugfrei). Auf die Sourcen zu Qt kannst du auch verzichten. Dazu kommt der QtCreator (unten unter Tools), und dann sind das knappe 3 GB.

Sind die 16 GB denn ein Problem?


Zitat:
klang kompliziert

Nun ja, ganz einfach ist es auch nicht. Es ist auch keine leichte Aufgabe, C++ und Qt gleichzeitig zu lernen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.04.2017, 20:48 Uhr
qwertzui



Danke für die Antworten! Ich werde mal sehen, was ich so alles bewerkstelligen kann
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.04.2017, 10:16 Uhr
qwertzui



...wobei ich mich doch erstmal mit der WinAPI auseinandersetzen werde.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: