Bei Klick auf Button neues Fenster erstellen & Rückgabewert
-
Hi
Ich versuche mich zur Zeit daran ein Frontend für ne DB in C++ zu schreiben.
Das Einbinden der MySQl API hat auch wunderbar funktioniert und kann erfolgreich über nen Button Connecten und Disconnecten.nun will ich noch einen Button haben der wenn ich auf diesen Klicke ein neues Fenster erscheinen lässt in welcehn ich wiederum auch Buttons usw. erstellen könnte.
aber irgendwie komm ich an dieser stelle nicht weiter. hab jetzt schon zwei Tage damit verbracht das auf die reihe zu bekommen aber es will einfach nicht klappen.
Und ich würde noch gerne wissen wie ich die Rückgabewerte des Fensters bekommen kann.
so das wäre es für erste.
danke schon mal für die Hilfe.mfg
FoncePS: als IDE verwende ich MS Visual Studio 6.0
-
mh..habs nun hinbekommen das er ein neues Fenster erstellt.
allerdings habe ich das problem das er in dieses Fenster das selbe zeichnet wie in das MainWindow
EDIT:
also zeichenen nur ein einem Fenster funktioniert.
nur die sachen aus dem WM_Create teil werden in beiden Fenstern angezeigt
-
erm du solltest vllt. ne zweite wndclass erstellen oder nen dialog verwenden.
mfg tobZel
-
Ich würde jetzt spontan sagen, das zweite fenster im "WS_CHILD" style erzeugen und mit "SetWindowLong" einen Wert übergeben, der unter "WM_NOTIFY" -> "switch(wParam){"..... im eventhandler abgefangen werden kann. Mit diesem Wert kannst du dann Sachen an das Childwindow schicken.
-
ne zweite WND klasse hab ich und wenn ich das Fenster als WS_CHILD mache kann ich es nur ein dem Bereich der MainWindow verschieben

-
nur die sachen aus dem WM_Create teil werden in beiden Fenstern angezeigt :confused:Auch zweite wnd proc und bei CreateWindow die zweite klasse angegeben?
-
Ideee schrieb:
Ich würde jetzt spontan sagen, das zweite fenster im "WS_CHILD" style erzeugen und mit "SetWindowLong" einen Wert übergeben, der unter "WM_NOTIFY" -> "switch(wParam){"..... im eventhandler abgefangen werden kann. Mit diesem Wert kannst du dann Sachen an das Childwindow schicken.
Sinnlos.
Fonce schrieb:
ne zweite WND klasse hab ich und wenn ich das Fenster als WS_CHILD mache kann ich es nur ein dem Bereich der MainWindow verschieben

Ja, das ist auch logisch.
Zeig mal Deinen Code, dann können wir uns das rumraten sparen. Glaube das ist ein simpler Fehler.
-
habs nun selbst hinbekommen
musste halt nur für das Fenster ne extra Callback Funktion erstellen.müsste jetzt nur wissen wie ich nen Rückgabe werd von dieser bekommen kann?
und wie ich es schaffe das die Buttons direkt nach dem öffnen des Fensters gezeichnet werden und nicht erst nach dem ich es bewegt habe
hier mal mein Code(welcher allerdings nicht ganz sauber ist da ich zur zeit erstmal in der Testphase bin um neue Funktionen zu lernen
)/****************************************************************** Programm: 3DFusion Graka DB Frontend Funktion: Frontend für die Grafikkarten Datebenbank von 3DFusion Bemerkung: Autor(en): Julian Rehborn letzte Aenderung: 28-04-07 JR ******************************************************************/ #include "StdAfx.h" #include "menu.h" bool Connectionstable=false; //Hier werden die die Datenbank, der Benutzername usw. //welche für die Verbidung mit der MySQL Datenbank notwendig sind //Definiert #define def_host_name "localhost" #define def_user_name "Fonce" #define def_passwort "zoggen" #define def_db_name "3dfusion" unsigned int error; MYSQL *my; HWND hWnd = 0, hWnd2=0; LRESULT CALLBACK WindowFunc2(HWND hwnd2, UINT msg2, WPARAM wParam2, LPARAM lParam2); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { hWnd = CreateMainWindow(hInstance); //hWnd2 = CreateMainWindow(hInstance); if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { HANDLE brush = CreateSolidBrush(RGB(236,233,216)); WNDCLASSEX wndClass; wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WindowFunc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.lpszMenuName = "MEINMENU"; wndClass.lpszClassName = "WindowClass"; wndClass.hIcon = LoadIcon(NULL, /*IDI_WINLOGO*//*IDI_ICON1*/MAKEINTRESOURCE(IDI_ICON1)); wndClass.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1)); RegisterClassEx(&wndClass); return CreateWindowEx(NULL, "WindowClass", "3DFusion Grafikkarten Datenbank Frontend", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 12, 125, 1024, 768, NULL, NULL, hInstance, NULL); } HWND CreateMenuWindow(HINSTANCE hInstance2) { WNDCLASSEX wndClass2; wndClass2.cbSize = sizeof(WNDCLASSEX); wndClass2.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wndClass2.lpfnWndProc = WindowFunc2; wndClass2.cbClsExtra = 0; wndClass2.cbWndExtra = 0; wndClass2.hInstance = hInstance2; wndClass2.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); wndClass2.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass2.lpszMenuName = NULL; wndClass2.lpszClassName = "WindowClass2"; wndClass2.hIcon = LoadIcon(NULL, IDI_WINLOGO); wndClass2.hIconSm = LoadIcon(NULL, IDI_WINLOGO); RegisterClassEx(&wndClass2); return CreateWindowEx(NULL, "WindowClass2", "Test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, hWnd, NULL, hInstance2, NULL); } LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // HDC hDC; HINSTANCE hInstance2=NULL; switch(msg) { case WM_CREATE: break; case WM_KEYDOWN: /*switch(wParam) { case VK_ESCAPE: SendMessage(hwnd, WM_CLOSE, 0, 0); break; }*/ case WM_COMMAND: { if (HIWORD(wParam) == BN_CLICKED) { switch(LOWORD(wParam)) { case ID_Exit: mysql_close(my); // verbindung trennen SendMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_Connect2: switch(Connectionstable) { case false: /*my = mysql_init(NULL); if(my == NULL) { fprintf(stderr, "Initialisierung fehlgeschlagen\n"); exit (EXIT_FAILURE); } if( mysql_real_connect ( my, // Zeiger auf MYSQL-Handler def_host_name, // Host-Name def_user_name, // User-Name def_passwort, // Passwort für user_name def_db_name, // Name der Datenbank 0, // Port (default=0) NULL, // Socket (default=NULL) 0 )) // keine Flags ) == NULL { error = mysql_errno(my); } else { SetWindowText(reinterpret_cast<HWND>(lParam), TEXT("Disconnect")); Connectionstable=true; } break;*/ CreateMenuWindow(hInstance2); case true: mysql_close(my); SetWindowText(reinterpret_cast<HWND>(lParam), TEXT("Connect")); Connectionstable=false; break; } //CreateMenuWindow(hInstance2); break; case ID_DISCONNECT: mysql_close(my); break; } } } break; case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_PAINT: PAINTSTRUCT ps; HDC hDC,hDC2; hDC = BeginPaint(hWnd,&ps); //Achtung hier beginnt der Bereich zum Zeichnen //Achtung hier endet der Bereich zum Zeichnen EndPaint(hWnd,&ps); hDC2 = BeginPaint(hWnd2,&ps); LineTo(hDC2, 100,100); EndPaint(hWnd2, &ps); return 0; break; } return (DefWindowProc(hwnd, msg, wParam, lParam)); } LRESULT CALLBACK WindowFunc2(HWND hwnd2, UINT msg2, WPARAM wParam2, LPARAM lParam2) { // HDC hDC; HINSTANCE hInstance2=NULL; switch(msg2) { case WM_CREATE: CreateWindowA("BUTTON", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 5, 5, 100, 30, hwnd2, (HMENU)ID_Test, ((LPCREATESTRUCT)lParam2)->hInstance, NULL); break; case WM_KEYDOWN: /*switch(wParam) { case VK_ESCAPE: SendMessage(hwnd, WM_CLOSE, 0, 0); break; }*/ case WM_COMMAND: { if (HIWORD(wParam2) == BN_CLICKED) { switch(LOWORD(wParam2)) { case ID_Test: break; default: // int i; break; } } } break; case WM_DESTROY: //PostQuitMessage(0); SendMessage(hwnd2, WM_CLOSE, 0, 0); return 0; break; case WM_PAINT: PAINTSTRUCT ps; HDC hDC2; hDC2 = BeginPaint(hWnd2,&ps); LineTo(hDC2, 100,100); EndPaint(hWnd2, &ps); return 0; break; } return (DefWindowProc(hwnd2, msg2, wParam2, lParam2)); }