[osg-users] Intercepting Windows messages

Anders Backman andersb at cs.umu.se
Thu Nov 12 05:24:56 PST 2015


That is quite explicit. I was thinking about some method for intercepting
events.
I tried fiddling with creating a custom GraphicsWindowWin32 class, but it
turns out that this is explicitly created internally in:

osg::GraphicsContext* Win32WindowingSystem::createGraphicsContext(
osg::GraphicsContext::Traits* traits )
{
...
        osg::ref_ptr<osgViewer::GraphicsWindowWin32> window = new
GraphicsWindowWin32(traits);

}

So this does not seem to be the way to catch windows messages.
My idea was that I could register my instance of the GraphicsWindowWin32 to
implement the virtual method:

LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT
uMsg, WPARAM wParam, LPARAM lParam )


Where I could catch all windows events.


Turns out that I do not have enough understanding when and where context
etc is created.

It seems that a GraphicsWindowWIn32 is first created at the call to:

    osg::ref_ptr<osg::GraphicsContext> gc =
osg::GraphicsContext::createGraphicsContext(traits.get());


And then at the call to:

viewer->realize();

will also result in a call
to GraphicsContext::createGraphicsContext(Traits* traits), which in turn
will create yet another GraphicsWindowWin32.

So there lies my problem, my call to viewer->realize() will override my
first call to GraphicsContext::createGraphicsContext(traits.get());


Not sure how to get around this though. Ideas?

/Anders


On Wed, Nov 11, 2015 at 5:05 PM, Trajce Nikolov NICK <
trajce.nikolov.nick at gmail.com> wrote:

> Hi Anders,
>
> here is what I do for this on Windows
>
>     while (!viewer->done())
>     {
>
> #if defined(_WIN32)
>         MSG msg;
>         if (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
>         {
>             ::GetMessage(&msg, NULL, 0, 0);
>
>             if (wins.size())
>             {
>                 osgViewer::GraphicsHandleWin32 *hdl =
> dynamic_cast<osgViewer::GraphicsHandleWin32*>(wins.at(0));
>                 if(hdl)
>                 {
>                     WNDPROC fWndProc =
> (WNDPROC)::GetWindowLongPtr(hdl->getHWND(), GWLP_WNDPROC);
>                     if (fWndProc && hdl->getHWND())
> {
> ::CallWindowProc(fWndProc,hdl->getHWND(),msg.message, msg.wParam,
> msg.lParam);
> }
>                 }
>             }
>         }
> #endif
>
> On Wed, Nov 11, 2015 at 4:21 PM, Anders Backman <andersb at cs.umu.se> wrote:
>
>> Hi.
>>
>> Trying the 3DConnexion SpaceNavigator with OSG. However I would like to
>> stay away from VRPN and such dependencies...
>>
>> I was wondering how to best intercept Windows messages from the
>> GraphicsWindowWin32 class.
>>
>> This class has a virtual method handleNativeWindowingEvent which I would
>> like to override to catch custom messages from my device.
>>
>> Would it be possible to implement a derived class and have that
>> instantiated instead of the standard osgViewer::GraphicsWindowWin32 one?
>>
>> Or is there a different method to listen to the  messages:
>>
>> ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
>>
>> Thanks,
>> Anders
>>
>>
>>
>> --
>> __________________________________________
>> Anders Backman, HPC2N
>> 90187 Umeå University, Sweden
>> anders at cs.umu.se http://www.hpc2n.umu.se
>> Cell: +46-70-392 64 67
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
>
> --
> trajce nikolov nick
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>


-- 
__________________________________________
Anders Backman, HPC2N
90187 Umeå University, Sweden
anders at cs.umu.se http://www.hpc2n.umu.se
Cell: +46-70-392 64 67
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20151112/a3ed4e7c/attachment-0003.htm>


More information about the osg-users mailing list