Win32 help

BlitzMax Forums/BlitzMax Programming/Win32 help

kfprimm(Posted 2006) [#1]
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