hacker
Goto Top

Win32-Fenster wird nicht angezeigt

CreateWindowEx liefert NULL-Handle?

Hallo,
Ich habe folgendes Problem: Jedes mal, wenn ich die CreateWindowExA(...) Funktion aufrufe, bekomme ich in meinem Projekt ein NULL-Handle. Ich hab schon versucht, ein bereits funktionierendes Fenster aus einem anderen Projekt (aus einem Programmierbuch) einzufügen, und obwohl es in dem dort einwandfrei funktioniert hat, passiert da genau das selbe, deswegen schließe ich einen Fehler der WNDCLASSEXA-Füllung mal aus. Da ich auch kein Fehlercode habe (RegisterWinClassExA liefert wie normal 0) weis ich auch nicht, wo das Problem sein könnte.

Hier der Code: (von meiner Funktion)
void CreateForm(void)
{
// Fenster erstellen

WNDCLASSEXA menueclass;
const char szclassname = "SIMyMenueClass";  

menueclass.cbSize = sizeof(WNDCLASSEXA);

menueclass.style = CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE;

menueclass.lpfnWndProc = WindowProc;

menueclass.cbWndExtra = 0;
menueclass.cbClsExtra = 0;

menueclass.hInstance = hInstance;

menueclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
menueclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
menueclass.hCursor = LoadCursor(NULL, IDC_ARROW);

menueclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;

menueclass.lpszMenuName = NULL;

menueclass.lpszClassName = szclassname;

if(!RegisterClassExA(&menueclass))
	ExitProcess(0);          // Ist nur temporär

hWnd = CreateWindowExA(WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
	szclassname, "Menü", WS_OVERLAPPED | WS_VISIBLE,  
	CW_USEDEFAULT, CW_USEDEFAULT, 270, 205,
        NULL, LoadMenuA(NULL, "myMenu"), hInstance, NULL);  

        // Hier kommt immer NULL raus!!!

	// Steuerelemente platzieren ...
}

Falls es wichtig ist: Ich habe Windows Vista SP 1 und verwende Visual C++ Express Edition 2008

Ich hoffe, jemand kann mir helfen!!!

PS: Wie stelle ich eingendlich mein Projekt um, das das UNICODE - Flag nicht gesetzt wird?

Content-Key: 138402

Url: https://administrator.de/contentid/138402

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: StefanKittel
StefanKittel 16.03.2010 um 20:12:04 Uhr
Goto Top
Hallo,
was liefert denn GetLastError() zurück?
Stefan

PS:
CString GetLastErrorAsString(DWORD _errorID)
{
char GetLastErrorText[1024];
CString tempS;

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, _errorID, MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), GetLastErrorText, 1024, NULL );

tempS = GetLastErrorText;
tempS.Trim("\r\n\t ");

return tempS;
}
Mitglied: lowbyte1
lowbyte1 16.03.2010 um 22:06:46 Uhr
Goto Top
Hi


Unicode kanst du unter Project ... Properties ... Configuration Properties ... C/C++ ... General.
Dan kannst du unter dem eintrag "Use UNICODE Response Files" den Value auf no setzen .

Denke das ist auch das Problem. Habe aber dein Quellcode nicht angeschaut.!! Stress face-smile


Nachtrag:

Schau mal da !
hWnd = CreateWindowExA(WS_EX_TOOLWINDOW | WS_EX_TOPMOST ,szclassname, "Menü", WS_OVERLAPPED | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 270, 205, NULL, LoadMenuA(NULL, "myMenu"), hInstance, NULL);   
 bei "Menü" und "myMenu"  
Sollte doch UNICODE tauglich gemacht werden wen ich mich nicht ire !


lowbyte
Mitglied: Hacker
Hacker 17.03.2010 um 16:00:17 Uhr
Goto Top
GetLastError liefert bei mir: "Der Vorgang wurde erfolgreich beendet."

Aber wenn sogar eine lauffähige Fensterfunktion 0 zurückkriegt, muss doch da irgendetwas nicht stimmen!

Ich nehme aber nicht an, das die Funktion irgendwie falsch ist, sonst würde ja eigendlich von Winows ein Fehler geliefert werden!