CreateWindowEx

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Pummelie

Betreff: CreateWindowEx

BeitragFr, Aug 13, 2010 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich versuche mit BB über die Userliv Funktion CreateWindowEx ein einfaches Fenster zu erstellen.
Das Problem ist, das sich BB dabei ganz einfach mal aufhängt Confused

Hier mein decls Eintrag:
Code: [AUSKLAPPEN]
api_CreateWindowEx% (dwExStyle%, lpClassName$, lpWindowName$, dwStyle%, x%, y%, nWidth%, nHeight%, hWndParent%, hMenu%, hInstance%, lpParam*) : "CreateWindowExA"


Hier mein Code:
Code: [AUSKLAPPEN]
api_CreateWindowEx(256,0,"Test Window",$cf0000,30,30,100,100,0,0,0,0)
It's done when it's done.

Eingeproggt

BeitragFr, Aug 13, 2010 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mal so weit gekommen:

Code: [AUSKLAPPEN]
Local classname=CreateBank(128)
;PokeString(classname,"")
Local windowname=CreateBank(128)
PokeString(windowname,"Test Window")
Local nullbank=CreateBank(0)

Const WS_EX_WINDOWEDGE=$100
api_CreateWindowEx(WS_EX_WINDOWEDGE,classname,windowname,$cf0000,30,30,100,100,0,0,0,nullbank)
DebugLog "Fertig"
WaitKey()
End

Function PokeString(BankAddr,StringOut$,BufferOffset=0)
   Local n
   For n=1 To Len(StringOut$)
      PokeByte BankAddr,BufferOffset,Asc(Mid$(StringOut$,n,1))
      BufferOffset=BufferOffset+1
   Next
   PokeByte BankAddr,BufferOffset,0
End Function


die decls musst du ändern in:

Code: [AUSKLAPPEN]
api_CreateWindowEx% (dwExStyle%, lpClassName*, lpWindowName*, dwStyle%, x%, y%, nWidth%, nHeight%, hWndParent%, hMenu%, hInstance%, lpParam*) : "CreateWindowExA"


Dann hängt BB bei mir nicht und macht keinen MAV - allerdings der "Schönheitsfehler": Ich seh auf die Art kein Fenster Sad
Muss man wohl noch etwas mehr über die Styles wissen als ich - oder allgemein vlt fehlen da noch ein paar Parameter die wir alle auf 0 haben? Leider keine Ahnung.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Pummelie

BeitragFr, Aug 13, 2010 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm ja, das hilft schonmal weiter, doch zeigt er aus dem grund nichts, das er einfach nix erstellt, der befehll gibt eine 0 zurück...
It's done when it's done.
 

Rufus Serano

BeitragSa, Aug 14, 2010 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist die Window-Class(siehe hier)... Ich schätze, ohne eine DLL wird es sehr schwer da was zu erreichen. Mit den vorgefertigten WindowClasses kann man jedoch recht problemlos ein Fenster erstellen, ist alles jedoch recht eingeschränkt...
Hier mein Ergebniss:

Code: [AUSKLAPPEN]

Const WS_EX_TOOLWINDOW=$80
Const WS_POPUP=$80000000

bnk=CreateBank(128)

hwnd = api_CreateWindowEx(ws_ex_toolwindow,"Button","TestWindow",ws_popup,10,10,300,200,SystemProperty("AppHWND"),0,0,bnk)

Print hwnd

api_ShowWindow(hwnd,1)

WaitKey
FreeBank bnk
End


Code: [AUSKLAPPEN]

.lib user32.dll

api_CreateWindowEx% (dwExStyle%, lpClassName$, lpWindowName$, dwStyle%, x%, y%, nWidth%, nHeight%, hWndParent%, hMenu%, hInstance%, lpParam*) : "CreateWindowExA"
api_ShowWindow% (hwnd%, nCmdShow%) : "ShowWindow"


Hoffe das hilft weiter, wenns wer schafft eine Windowclass per BB zu registrieren, die auch funktioniert, darf er mir gerne ne PM schreiben Smile

@Pummelie
lpParam ist ein Pointer und muss als Bank gehandhabt werden, wenn man da ne '0' eingibt, gibts ne MAV.

MfG

Pummelie

BeitragSa, Aug 14, 2010 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh super, so funktionierts, sehr eiganartig mei msdn steht irrgendwas das man es auch weg lassen kann, also das es ein optionaler paramter ist Confused
It's done when it's done.
 

Rufus Serano

BeitragSa, Aug 14, 2010 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
u.U. ist das das Problem das auftritt:

Zitat:
hMenu [in, optional]
HMENU

A handle to a menu, or specifies a child-window identifier, depending on the window style. For an overlapped or pop-up window, hMenu identifies the menu to be used with the window; it can be NULL if the class menu is to be used.


Soll heißen, wenn sowohl der ClassName nist existiert als auch hMenu=Null ist, fehlen Windows die Informationen von hMenu. Demnach wird dann auch kein Fenster erstellt. ich vermute einfach mal (ungetestet), dass man den ClassName weglassen kann, wenn hMenu angegeben ist. Ist aber nur ne Spekulation...

MfG

~~~EDIT~~~

Code: [AUSKLAPPEN]
Const WS_EX_TOOLWINDOW=$80
Const WS_EX_APPWINDOW=$40000
Const WS_POPUP=$80000000
Const WS_CHILD=$40000000

bnk=CreateBank(128)
 
hmenu=api_CreateMenu()

Print hmenu

hwnd = api_CreateWindowEx(ws_ex_appwindow,"Blitz Runtime Class","TestWindow2",0,10,10,300,200,SystemProperty("AppHWND"),hmenu,SystemProperty("ApphInstance"),bnk)

Print hwnd

api_ShowWindow(hwnd,1)

WaitKey
FreeBank bnk
End


Zitat:
HAHA! Sprach der Hamster und sprang in den Mixer!


Jetzt müsste man nur noch Zeichenbefehle hinschicken können^^

Pummelie

BeitragSa, Aug 14, 2010 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm nette Leistung Smile
It's done when it's done.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group