Dev-C++: Der Anfang...
-
Es gibt für den Dev-C++ WxWidgets oder du versuchst es mit GTK+. Ebenfalls alles auf bloodshed.org zu haben. Eine weitere Lib wäre QT (ist aber kostenpflichtig :()
-
Und wie würde ich die GTK verwenden? Wie macht man dasdort mit Fenster zeichnen, etc?
-
klar als gui kannst du so ziemlich alles verwenden was es gibt (wxWidgets, GTK, Gtkmm, FLTK, ......)
aber programmieren musst du immer. ausser vielleicht bei ein paar ausnahmen wie FLTK denn das fluid dabei usw.
aber ich habe dich so verstanden das du windows programme erstellen willst und dabei die winapi benutzen möchtest. sprich "reine" windowsprogrammierung. also auf gui's oder irgendwelche wrapper MFC, VCL usw verzichten möchtest. Allerhöchstens deinen eigene Wrapper schreiben.
was möchtest du den genau machen ?
-
Zum Anfang nur ein Fenster mit einem Button drauf, wo "Hello World" draufsteht, mehr nicht, und von allen die einfachste Methode verwenden... alos was soll ich nun nehmen?
-
meiner meinung das was schon gegeben ist. die winapi.
-
gut, also ich hab das schon hinbekommen:
#include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hEdit; /* Instance of edit field */ HWND hButton; /* Instance for button */ HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( WS_EX_TOOLWINDOW|WS_EX_WINDOWEDGE, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 240, /* The programs width */ 120, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); hButton = CreateWindow( "BUTTON", /* Classname */ "OK", /* Title Text */ WS_VISIBLE|WS_TABSTOP|WS_CHILD|BS_DEFPUSHBUTTON, /* default window */ 91, /* Windows decides the position */ 8, /* where the window ends up on the screen */ 50, /* The programs width */ 25, /* and height in pixels */ hwnd, /* The window is a child-window to desktop */ NULL, /* No menu */ (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), /* Program Instance handler */ NULL /* No Window Creation data */ ); hEdit = CreateWindowEx( WS_EX_CLIENTEDGE, /* Extended possibilites for variation */ "EDIT", /* Classname */ "Hello world!", /* Title Text */ WS_VISIBLE|WS_TABSTOP|WS_CHILD, /* default window */ 8, /* Windows decides the position */ 10, /* where the window ends up on the screen */ 75, /* The programs width */ 21, /* and height in pixels */ hwnd, /* The window is a child-window to desktop */ NULL, /* No menu */ (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Das erstellt ein einfaches Fenster (Toolwindow) mit einem Edit-Feld und einem Button... so... und wie kann ich beim Button jetzt Ereignisse abfangen?
- Windoof
-
deinem button musst du noch ne id zuweisen, die id definierst du am besten irgendwo nach dem includieren
#define ID_BUTTON1 100
hButton = CreateWindow( "BUTTON", /* Classname */ "OK", /* Title Text */ WS_VISIBLE|WS_TABSTOP|WS_CHILD|BS_DEFPUSHBUTTON, /* default window */ 91, /* Windows decides the position */ 8, /* where the window ends up on the screen */ 50, /* The programs width */ 25, /* and height in pixels */ hwnd, /* The window is a child-window to desktop */ (HMENU)ID_BUTTON1, (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), /* Program Instance handler */ NULL /* No Window Creation data */ );
in deiner winproc musst du jetzt die message WM_COMMAND abfangen.
case WM_COMMAND: if(HIWORD(wParam) == BN_CLICKED) { switch(LOWORD(wParam)) { case ID_BUTTON1: MessageBox(hwnd, "Hello World", "Hello World", MB_OK); break } }
-
Also langsam gefällt mir das Dev-C++ immer mehr... danke!
-
übrigens. dev-cpp ist nur eine entwicklungsumgebung, hat eigentlich nichts mit deiner programmierung zu tun. denn diese ist reines winapi. du könntest deine programme auch mit irgendeinem editor schreiben (notepad, textpad, ...) und diese dann kompilieren http://www.c-plusplus.net/compiler.htm
-
Ja, ok... das weiß ich ja... ich meine nur so... endlich mal weg vom Borland-Shice
Aber was mich jetzt mal so interessieren würde: Wie macht man das alles in der GTK? Kennt sich da jemand aus?
-
gtk net so, aber die page hat nen riesen tutorial http://www.gtk.org/tutorial/
hab schon wxwidgets und fltk probiert.
-
Ich denke, ich komme später drauf zurück
bin grad sehr mit der WinAPI beschäftigt, in die ich mich gerade verliebt habe... ich denke, ich werde die eine oder andere software, die ich in Borland gemacht habe, nun in Dev-C++ (WinAPI) umwandeln... und vertreiben. Vielen Dank für eure Hilfe nochmal, ich wünschte, dass mir immer und überall so gut geholfen wird...
-
Es gibt als einfach zu verwendendes und sehr schlankes GUI-Toolkit auch FLTK (http://www.fltk.org/) inklusive GUI-Builder (mit Klick-Bedienung zur Benutzeroberfläche + ggf. ein paar Zeilen C++ in Dialogfenster) namens FLUID.