2016-04-25 10:17 GMT+02:00 Nicolai Hess <[email protected]>: > > > 2016-04-25 9:28 GMT+02:00 Esteban Lorenzano <[email protected]>: > >> Hi Nicolai, >> >> On 25 Apr 2016, at 09:14, Nicolai Hess <[email protected]> wrote: >> >> >> >> 2016-04-24 15:26 GMT+02:00 Torsten Bergmann <[email protected]>: >> >>> Hi Nicolai, >>> >>> missed this thread - sorry. To my knowledge there was a call in NB for >>> CreateWindow >>> but there was no example in opening a new window. For X-Windows there >>> was an example >>> if I remember correctly. >>> >> >> Hi Torsten, >> >> yes there is an "example" in NBOpenGL. On Windows, it registers and >> creates window for getting an opengl context. >> The code and classes for registering and creating a window are similiar >> to what is now in your os-windows. >> I needed to define some more pool variables for some style attributes, >> all that is working. >> What did not work is storing the hInstance attribute in the WndClass >> struct. >> >> >> what and how it does not work? >> can you paste the code? >> > > > Sure. > Load stable version of Torstens OSWindows. > Change WinProcess class>>getVMModuleHandle (it has to use HINSTANCE > instead of HMODULE (or just define a new pool variable HMODULE in WinTypes)) > > getVMModuleHandle > "The GetModuleHandle function retrieves a module handle for the > specified module if the file has been mapped into the address space of the > calling process." > > ^ self ffiCall: #( HINSTANCE GetModuleHandleA (0)) module: #Kernel32 > > > Now create a new WinWndClassEx and set the hInstance field: > > |hInst wndClass| > hInst := WinProcess getVMModuleHandle. > wndClass := WinWndClassEx new. > wndClass hInstance: hInst. > > > -> Message not understood SmallInteger>>isExternalAddress > > > The equivalent code with NB that was working: > > |hInst wndClass| > hInst := NativeBoostWin32 getVMModuleHandle. > wndClass := NBWndClassEx new. > wndClass hInstance: hInst. > wndClass > > Any more ideas?
> > >> >> cheers! >> Esteban >> >> With NBOpenGL (and non-spur resp. NativeBoost) this works. >> With the new UnifiedFFI this gives an error from: >> >> pointerAt: byteOffset put: value >> "Store a pointer object at the given byte address" >> value isExternalAddress >> >> >> >>> >>> Basically I would like to add support for this into OS-Windows, yes. >>> Some parts are there and UFFI now has easy callbacks. Havent looked >>> at OSWindow yet - but I guess the goal is to create native windows as >>> well. >>> Also I would like to add more support in manipulating/quering other >>> external windows (which can be done using the already built in support >>> for process and window handles). >>> >>> In Win32 to create a window one has to register a window class first and >>> use the window class name afterwards in the CreateWindow API function. >>> >>> No time to look into this this week ... but can give a try afterwards. >>> The WNDCLASS/WNDCLASSEX structure needs to be wrapped, RegisterClass >>> called and CreateWindowEx with a callback for a function to process >>> window messages. >>> >>> Dont know how if this interferes with the VM's own processing loop ... >>> but we should give a try. If you catch me on Slack next week we can >>> try together. >>> >>> Bye >>> Torsten >>> >>> >>> Gesendet: Sonntag, 24. April 2016 um 12:17 Uhr >>> Von: "Nicolai Hess" <[email protected]> >>> An: "Pharo Development List" <[email protected]> >>> Betreff: Re: [Pharo-dev] OS-Windows and UnifiedFFI >>> >>> >>> >>> 2016-04-15 21:58 GMT+02:00 Nicolai Hess <[email protected]>: >>> >>> Hi Torsten, Esteban, >>> I try to use OS-Windows (not OSWindow :) ) with latest spur VM and >>> UnifiedFFI.As far as I can see, you (Torsten) already ported some parts to >>> UnifiedFFI - great, thanks! >>> I now try to open a new window withWinWindow>>createWindowEx ....as I >>> took this example originally from NBOpenGL, it seems I have to define >>> a Window Class first, with >>> WinWndClassEx >>> This seems to work in the old NBOpenGL/NBWin32 code but not with >>> OS-Windows >>> WinWndClassEx >>> first, NBOpenGL uses >>> NativeBoostWin32 getVMModuleHandle for an HModule instance >>> there is a similar call in OS-Windows, WinProcess getVMModuleHandle >>> (I needed to define a missing type, HMODULE, but that works). >>> >>> What does not work is this part: >>> >>> | hInst wndClass | >>> hInst := WinProcess getVMModuleHandle. >>> wndClass := WinWndClassEx new. >>> wndClass hInstance: hInst. >>> >>> FF complains about >>> pointerAt: byteOffset put: value >>> "Store a pointer object at the given byte address" >>> value isExternalAddress >>> >>> here value is not a handle, but a small integer, and it does not define >>> isExternalAddress >>> >>> I tried to put the handle instead of the handles value, but this does >>> not work either. >>> >>> Any Idea what is missing here, I need a way to store the HMODULE handle >>> in the structure of the WinWNdClassEx >>> >>> Thanks in advance. >>> >>> Anyone? >>> >>> >> >> >
