Apifunktion CreateWindow() erzeugt MAV ?!?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

flashmaxel

Betreff: Apifunktion CreateWindow() erzeugt MAV ?!?

BeitragDi, Okt 03, 2006 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Leider muss ich euch schon wieder mit einem Problem auf die Nerven gehen. Wink
Nachdem ich vor ein paar Tagen die WinApi richtig entdeckte kam mir die Idee, dass man um Windowsbuttons im Blitzfenster zu erzeugen gar keine extra Dll benötigt, da es die Funktion CreateWindowEx() in der user32.dll gibt, die ja sowiso jeder Windos-User haben sollte. Da Windows Buttons,Editfelder,... ja nichts anderes sind als Windows fenster nur einer andern Klasse angehören, ist das ja mit dieser Funktion machbar.
Ich hab dann auch gleich begeistert die user32.decls von hier genommen und die Funktion verwendet.
Genaue Funktionsbeschreibung findet ihr da : http://www.cpp-tutor.de/mfc/mf...ndowex.htm
Blöderweise stellte sich dann raus das ich beim ausführen einen MAV erhalte Sad .
Mein Code: (funktioniert natürlich nur mit der decls von oben im Userlibverzeichnis)
Code: [AUSKLAPPEN]

;Gafikmodus/Titel setzten
Graphics3D 800,600,0,2
title$="TestButtons"
AppTitle title$
;Blitz Fenster ermittlen
bbHwnd= api_FindWindow("Blitz Runtime Class",title$)
;Style des Blitzfensters ermittlen
style=api_GetWindowLong(bbHwnd,-16)
;Style des Blitzfenster setzen so das es auch childfenster haben kann
api_SetWindowLong(bbHwnd,-16,style Or WS_CLIPCHILDREN)
;Dann die eigentliche Funktion aufrufen
fenster=api_CreateWindowEx(0,"Button","Testbutton",WS_CHILD Or WS_VISIBLE,10,10,100,20,bbHwnd,101,0,0)

Alles geht davon außer CreateWindowEx, das dann den MAV erzeugt. Seltsam ist das es hier im englischen Forum (beitrag weiter unten) nicht anders gemacht wurde allerdings scheint der irgendwie gegenagen zu sein (bei mir nicht Wink )
Wenn einer weiß was ich falsch mache wäre es nett es zu posten Very Happy .
Danke im Voraus, Max !
Real C programmers never die; they cast to void.
 

Dreamora

BeitragDi, Okt 03, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du die Konstanten auch definiert für WS_CHILD und so?
Ich frage weil du oben direkt die Zahlenkonstanten nutzt ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

flashmaxel

BeitragDi, Okt 03, 2006 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh danke für den Hinweis das hatte ich vergessen noch hinzuschreiben.Ich hatte die Definitionen aus dem englischen Thread einfach übernommen.

Code: [AUSKLAPPEN]
Const WS_CHILD = $40000000
Const WS_MINIMIZE = $20000000
Const WS_VISIBLE = $10000000
Const WS_CLIPCHILDREN = $2000000
Const WS_BORDER = $800000
Const WS_TABSTOP = $10000
Const GWL_STYLE = -16
Const WS_EX_CLIENTEDGE = $200
Const WS_EX_LEFT = $00000000
Const ES_LEFT = 0
Const ES_CENTER = 1
Const ES_RIGHT = 2


Aber das hab ich in meinem Code gemacht also - daran lags nicht Exclamation Question
Ich mach das jetzt nochmal alles von vorne vieleicht hab ich mich ja irgednwo vertan. Wenn ihr noch einen Fehler entdeckt bitte sagts mir Smile
Danke Max
Real C programmers never die; they cast to void.
 

Dreamora

BeitragDi, Okt 03, 2006 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
etwas was mich am englischen stört ist: es liest mit get den style aus. Bei der Zuweisung verwendet es jedoch exStyle ... ich bin mir da nicht ganz sicher, dass dort dann einfach ein 0 hin muss und nicht eigentlich style oder sonst etwas sinnvolles ... Ansonsten hast du recht, dein Code ist identisch ...

Eine andere möglichkeit ist, ist das der Code mit B3D 1.8 funktioniert hat und mit der 1.98 halt so nimmer funktioniert weil einige Dinge hinzu gekommen sind.

PS: Guck mal nach WinBlitz3D, wenn du dir die Mühe nicht selbst machen willst eine GUI reinzuwürgen Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

flashmaxel

BeitragSa, Okt 07, 2006 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also der Style soll ja nicht überschrieben werden, es soll nur WS_CLIPCHILDREN hinzugefügt werden. Deswegen wird er erst abgefragt und dann wieder neu gesetzt, allerdings mit WS_CLIPCHILDREN. Ich denke, wie du sagtest, dass es an der Version liegt.
Ich würde übrigens sehr gerne Winblitz3D benutzen. Das war eigentlich von Anfang an geplant! Allerdings musste ich leider festellen, dass es damit Probleme gibt, wenn ich die Funktion SetWindowRgn aufrufe um das BlitzRuntimefenster zu maskieren, um es etwas stylischer wirken zu lasse Wink . Wenn ich dann zum Beispiel ein Editfeld hinzufüge, dann ist das Editfeld zwar da und man kann den Text darin auswählen aber irgendwie nichts eintippen ?!?. Wenn ich das selbe Editfield ohne SetWindowRgn benutze funktioniert allerdings alles ! Woran das liegen könnte hab ich keine Ahnung Smile aber jetzt werde ich mir wohl meine eigenen Editfelder,... basteln müssten oder eine schon existierende GUI benutzen.
Wenn einer vieleicht weiß wo der Fehler mit dem EditFeld liegt wäre es nett Vermutungen anzustellen Very Happy
Danke Max
Real C programmers never die; they cast to void.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group