Eigenes Fenster außerhalb von BOOL InitInstance()

04/21/2012 21:40 Zwawo#1
Mein Problem liegt darin, dass ich 2 Fenster haben möchte, das eine sich jedoch nur öffnen soll wenn ich beispielsweise einen Button gedrückt habe.
Also habe ich eine zweite Klasse gemacht etc. So, wenn ich nun das Fenster
erstellen lasse, wo das erste auch erstellt wird( in BOOL InitInstance() ), funktioniert alles wunderbar d.h. sie öffnen sich beide gleichzeitig, aber das möchte ich ja nicht.

Trage ich dann die Funktion CreateWindow() dahinein (außerhalb von BOOL InitInstance() ), dass wenn der bestimmte button gedrückt wird, wird die Funktion nicht richtig ausgeführt.
Mit anderen Fensterklasse also z.B wie "edit" wird das Fenster erstellt, nur nicht mit diesen eigenständigen Fensterklassen.

Was habe ich übersehen? Habe schon so viel ausprobiert. Ich hoffe ihr versteht mein Problem und könnt mir helfen.
04/21/2012 21:57 MrSm!th#2
Du sprichst wahrscheinlich von einem MFC Projekt oder?
Würde es auch ein modaler Dialog tun? Die sind etwas einfacher zur handeln.
04/21/2012 22:03 Zwawo#3
Ich rede von einem normalen win32 Projekt. Jedoch kann ich nirgends ein eigenständiges Fenster außer in 1 Funktion nämlich der BOOL InitInstance() Funktion erstellen lassen. Versuche ich es Woanders bzw. so wie ich es gerade Versuche kommt der Fehler :

Code:
Eine Ausnahme (erste Chance) bei 0x7c9202f6 in *.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcccccccc.
04/21/2012 22:29 Nightblizard#4
Dann zeig' uns doch mal was du gemacht hast. Probleme ohne Quellcode finden ist fast nicht möglich.
04/21/2012 22:40 Zwawo#5
Die Code stücke sind rausgeschnitten:
Die Fenster Klasse ansich :
Code:
ATOM MyRegisterClass2(HINSTANCE hInstance)
{
	WNDCLASSEX wcexx;

	wcexx.cbSize = sizeof(WNDCLASSEX);

	wcexx.style			= CS_HREDRAW | CS_VREDRAW;
	wcexx.lpfnWndProc	= WndProc2;
	wcexx.cbClsExtra	   = 0;
	wcexx.cbWndExtra	= 0;
	wcexx.hInstance		= hInstance;
	wcexx.hIcon		= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_projekt));
	wcexx.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcexx.hbrBackground	= CreateSolidBrush( RGB( 50, 100, 250 ) );
	wcexx.lpszMenuName	= MAKEINTRESOURCE(IDC_projekt);
	wcexx.lpszClassName	= szWindowClass2;
	wcexx.hIconSm		= LoadIcon(wcexx.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcexx);
}
Der eine Button:
Code:
hwndan = CreateWindow(L"button", L" an", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
						20, 20, 100, 30, hWnd, (HMENU)5, hInstance, 0);
Der switch:
Code:
switch (wmId)
		{
		case 5:
			
hwndneu = CreateWindow(szWindowClass2, L"", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
      200, 200, 200, 200, NULL, NULL, hInstance, NULL);
break;
}
Oder :
Code:
switch (wmId)
		{
		case 5:

                        InitInstance2(hInstance, nCmdShow);

                 break;
               }

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


BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hwndneu;

      hwndneu = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      200, 200, 200, 200, NULL, NULL, hInstance, NULL);

 if (!hwndneu)
   {
      return FALSE;
   }

   ShowWindow(hwndneu, nCmdShow);
   UpdateWindow(hwndneu);
 
   return TRUE;
}
Wie gesagt, in einer einzigen Funktion wird Das fenster geöffnet nämlich in:
Code:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   HWND hwndneu;
   
   

   hInst = hInstance; // Instanzenhandle in der globalen Variablen speichern

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      200, 200, 200, 200, NULL, NULL, hInstance, NULL);
/////
   hwndneu = CreateWindow(szWindowClass2, szTitle, WS_OVERLAPPEDWINDOW,
      300, 200, 200, 200, NULL, NULL, hInstance, NULL);
/////


   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}