Win32 help

BlitzMax Forums/BlitzMax Programming/Win32 help

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

i don't know what im doin' wrong, CreateWindowExA,in CreateHWND, won't create a window it just returns 0.


Strict

Import PUB.Win32
Import PUB.DirectX

Extern "win32"
	Function RegisterClassExA(class:WNDCLASSEX)="RegisterClassExA@4"
	Function UpdateWindow(hwnd)="UpdateWindow@4"
End Extern 

Const D3D_SDK_VERSION=32|$80000000
Const D3D_SDK_VERSION_DEBUG=31|$80000000

Const D3DPRESENT_INTERVAL_IMMEDIATE=-2147483648

Global d3d:IDirect3D9=Null
Global d3ddev:IDirect3DDevice9=Null
Global d3dpp:D3DPRESENT_PARAMETERS=Null

Global TriDClassName:Byte Ptr="TriD_Window_Class".ToCString()

Function CreateHWND(width,height,fullscreen)
	If Not MyRegisterClass(GetModuleHandleA(0)) RuntimeError "Error registering class"
	
	
	Local hwnd,style
	
	If fullscreen
		style=WS_EX_TOPMOST|WS_VISIBLE|WS_POPUP
	Else
		style=WS_OVERLAPPEDWINDOW
	EndIf
	
	Local wndTitle:Byte Ptr=AppTitle.ToCString()
	Local wndClass:Byte Ptr=TriDClassName
	
	hwnd=CreateWindowExA(..
		0,..
		wndClass,..
		wndTitle,..
		style,..
		CW_USEDEFAULT,..
		CW_USEDEFAULT,..
		width,..
		height,..
		0,..
		0,..
		GetModuleHandleA(0),..
		Null)
	
	MemFree wndTitle
	
	If hwnd=0 RuntimeError "Error creating window"
	
	ShowWindow(hwnd,True)
	UpdateWindow(hwnd)	
	
	Return hwnd	
End Function

Function CreateD3D(hwnd,width,height,fullscreen,depth)
	Local version=D3D_SDK_VERSION
	?Debug
	version=D3D_SDK_VERSION_DEBUG
	?
	d3d=Direct3DCreate9(version)
	
	Local dm:D3DDISPLAYMODE=New D3DDISPLAYMODE
    d3d.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,dm)

	d3dpp=New D3DPRESENT_PARAMETERS
	d3dpp.Windowed = Not fullscreen
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
    d3dpp.EnableAutoDepthStencil = True
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16
    d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE
    d3dpp.BackBufferFormat = dm.Format
    d3dpp.BackBufferCount = 1
    d3dpp.BackBufferWidth = width
    d3dpp.BackBufferHeight = height
    d3dpp.hDeviceWindow = hwnd

	d3d.CreateDevice(..
		D3DADAPTER_DEFAULT,..
		D3DDEVTYPE_HAL,..
		hwnd,..
		D3DCREATE_SOFTWARE_VERTEXPROCESSING,..
		d3dpp,..
		d3ddev)
End Function

Function WinProc(hwnd,msg,wParam,lParam)
	bbSystemEmitOSEvent hwnd,msg,wParam,lParam,Null
	Select msg
		Case WM_DESTROY
			End
			Return 0
	End Select
	Return DefWindowProcA(hwnd,msg,wParam,lParam)
End Function

Function MyRegisterClass(hInstance)
	Global registered
	If registered Return
	registered=True

	Local wc:WNDCLASSEX=New WNDCLASSEX
	wc.cbSize=SizeOf(WNDCLASSEX)
	
	wc.style         = CS_HREDRAW|CS_VREDRAW
	wc.lpfnWndProc   = WinProc
	wc.cbClsExtra    = 0
	wc.cbWndExtra    = 0
	wc.hInstance     = hInstance
	wc.hIcon         = 0
	wc.hCursor       = LoadCursorA(Null, Byte Ptr IDC_ARROW)
	wc.hbrBackground = GetStockObject(WHITE_BRUSH)
	wc.lpszMenuName  = 0
	wc.lpszClassName = TriDClassName
	wc.hIconSm	     = 0
	
	Return RegisterClassExA(wc)
End Function

Type WNDCLASSEX
	Field cbSize
	Field style
	Field lpfnWndProc:Byte Ptr
	Field cbClsExtra
	Field cbWndExtra
	Field hInstance
	Field hIcon
	Field hCursor
	Field hbrBackground
	Field lpszMenuName:Byte Ptr
	Field lpszClassName:Byte Ptr
	Field hIconSm	
End Type