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
>
> 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?
>>
>>
>
>