Dev-C++: Der Anfang...
-
Windoof schrieb:
aber wie kann ich auf dieses Fenster zugreifen, drauf herummalen, etc...?
du meinst button auswählen, drauf zeichnen, button werte zuweisen. ?!?
wenn ja, das geht gar nicht.
du musst alles programmieren und nix mit "klicki und drauf, "programm" fertig".
-
Naja, ok... und wo bekommt man evtl. fertige Klassen her? Ich hab keinen Bock Jahrelang an einer eigenen "Engine" zu arbeiten, nur um ein einfaches Windows-Programm zu bekommen...
EDIT: Und keinen Bock auf unendlich große Programme, weshalb ich von Borland weg will...
-
wieso klassen? möchtest du alles in c++ schreiben? dann würd ich die forensuche mal bemühen (fensterklassen oder sa ähnlich)
normalerweise wird das aber mit createwindow gemacht
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindow.asp
bsp: button
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/usingbuttons.asp
-
Ahja... das ist schon interessanter... dann bastel ich mir eigene Klassen, die dann diese Funktionen verwenden, das sollte kein Problem sein... und wie sieht's aus mit Edit-Felder, Drop-Down-Boxen, List-Boxen, Memo-Feldern, etc? Kannst mir da auch noch solche Links geben? Das wäre nett, dann bau ich mir sone Art VCL zusammen, ich versuche es zumindest
- Windoof
-
beim ersteln link nach unten. dort stehen auch andere ctrl's
kannst du auch mal den wrapper von cd9000 anschauen
http://cd9000.netfirms.com/winapi/wrapper.html
-
Cool, danke miller, sieht bislang _noch_ recht einfach aus, muss ich mir heut abend mal ansehen, wenn ich daheim bin
Danke dir vielmals.
-
Also es gibt auch noch eine erweiterte Version der DevC++-IDE, die einen Editor für wx-widgets (früher wx-Windows) enthält (aber soweit ich weiss ist das "nur" ein Dialog-Editor). Das Projekt befindet sich noch in der Beta-Phase (wie DevC++ auch), und hat noch ein paar Macken, aber sieht ganz brauchbar aus, für den Anfang...
http://wxdsgn.sourceforge.net/Gruss,
Andreas
-
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.