Nick,

 

Yes.

 

-Brad

 

From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Trajce (Nick) 
Nikolov
Sent: Monday, September 20, 2010 2:23 PM
To: OpenSceneGraph Users
Subject: Re: [osg-users] Keypress broken since rev 11749

 

Hi Brad,

 

VS 8.0. Is that 2005? 


-Nick



On Mon, Sep 20, 2010 at 11:52 PM, Brad Huber <br...@procerusuav.com> wrote:

Nick,

 

Thanks for the extra input.  I’m using VC80.  I’ve previously hooked up Spy++ 
and noticed that my window does not receive either WM_CHAR or WM_GETDLGCODE.  
In addition I tried something like what you’ve mentioned and it doesn’t ever 
get a WM_CHAR.  It does get WM_KEYDOWN and others.  Anyway I’ve also come 
across several posts online saying the CDialog is different wrt WM_CHAR.

 

You’re example says differently and I haven’t tried a stripped down version 
like that.  I don’t want to belabor the point.  The issue is essentially fixed 
for me (regardless of which way we do translated / raw messages).

 

I guess we’ll see which direction Robert would like to take it vis-à-vis 
translated/untranslated, dead keys, etc.

 

Thanks

-Brad

 

From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Trajce (Nick) 
Nikolov
Sent: Monday, September 20, 2010 12:15 PM


To: OpenSceneGraph Users
Subject: Re: [osg-users] Keypress broken since rev 11749

 

Hi again Brad,

 

http://msdn.microsoft.com/en-us/library/619z63f5(VS.80).aspx

 

note the Note. This makes me think you are using older MFC that is not doing 
that .....


-Nick

On Mon, Sep 20, 2010 at 9:37 PM, Trajce (Nick) Nikolov 
<nikolov.tra...@gmail.com> wrote:

Hi Brad,

 

I hate arguing :) ... For me it works. I put a break point on the Sleep and I 
get there

 

BOOL CDialogDlg::PreTranslateMessage( MSG *pMsg )

{

if (pMsg->message == WM_CHAR )

{

// will I get here

Sleep(10);

}

return CDialog::PreTranslateMessage(pMsg);

}

-Nick

 

On Mon, Sep 20, 2010 at 9:28 PM, Brad Huber <br...@procerusuav.com> wrote:

Nick,

 

According to my understanding and experience, CDialog::PreTranslateMessage(MSG 
*msg) does not receive WM_CHAR messages so I cannot do anything about that.  In 
the MFC documentation there is a CWnd::GetDlgCode method which tells the 
framework which key messages (like WM_CHAR) your class would like to receive 
but again this does not work for CDialog classes.  GetDlgCode does not get 
called and PreTranslateMessage does not ever get WM_CHAR.  Therefore I cannot 
use any WM_CHAR based mechanism with my existing CDialog based app.  I can use 
a work around (ie don’t rely on any WM_KEYDOWN) and use WM_KEYUP instead.  I 
could also investigate inserting a control on top of the dialog which would 
allow receipt of WM_CHAR messages.  Anyway there is apparently nothing I can do 
to force WM_CHAR to work with CDialog.

 

Thanks

-Brad

 

From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Trajce (Nick) 
Nikolov
Sent: Monday, September 20, 2010 11:06 AM
To: OpenSceneGraph Users


Subject: Re: [osg-users] Keypress broken since rev 11749

 

Hi Brad,

 

Dialogs in MFC do not capture/receive the WM_CHAR message and that is why I 
cannot properly pass it on to the OSG window

 

you could override CDialog::PreTranslateMessage( MSG* msg ) and do it the same 
way is CView from the osgviewerMFC example


-Nick

On Mon, Sep 20, 2010 at 5:29 PM, Brad Huber <br...@procerusuav.com> wrote:

Gentlemen,

 

I apologize for being inactive on the thread these last few days.  I was on 
vacation at the Reno Air Races J.

 

Trajce- to address your point about how to make MFC “work properly”.  The 
example code IS NOT a dialog based MFC app.  My app IS a dialog based MFC app.  
Dialogs in MFC do not capture/receive the WM_CHAR message and that is why I 
cannot properly pass it on to the OSG window.  Of course there are other work 
arounds that address my particular problem (I believe I’ve already fixed it), 
but I’m trying to bring up the point that this may be a fundamental issue in 
the key handling.

 

Robert- One issue with including both the translated and untranslated keys in 
the event is that there is not a one to one mapping.  In windows sometimes 3 
key presses will translate to one WM_CHAR (translated key) message and they 
don’t even need to be pressed at the same time (in the case of dead keys).  
Whereas I believe there is a one-to-one between WM_KEYDOWN and key presses…

 

Thanks

-Brad

 

From: osg-users-boun...@lists.openscenegraph.org 
[mailto:osg-users-boun...@lists.openscenegraph.org] On Behalf Of Trajce (Nick) 
Nikolov
Sent: Friday, September 17, 2010 10:57 AM


To: osg-users@lists.openscenegraph.org
Subject: Re: [osg-users] Keypress broken since rev 11749

 

Hi Robert,

 

I find some time to dig into this. And here are my observations ( I am working 
with Vivien's submission, with osgviewerMFC )

 

I put break points in GraphicsWindowWin32.cpp:

Line: 2476

        case WM_KEYDOWN    :

        case WM_SYSKEYDOWN :

        ////////////////////

 

            {

                int keySymbol = 0;

 

Line: 2451

         /////////////////

        case WM_CHAR :

        /////////////////

            {    

                // if event was not handled by WM_KEYDOWN then we take care of 
it here

                // this method gives directly the utf16 char back so just need 
to add it as it is

                if(!_keypresshandled)

                {

                    // first check if key is already registered on the map

                    

 

case WM_KEYDOWN/WM_SYSKEYDOWN : get its chance to handle every single key you 
press, even a dead key. So, for my czech character 'č', I have to press: SHIFT, 
'+', and 'c', in this order, and for each of these three I get WM_KEYDOWN. The 
only difference is that when I complete this sequence, on top of all 
WM_KEYDOWNs, it gets to case WM_CHAR: with my 'č'. This is how the system is 
managing these events. To reflect this behavior into OSG, only one single line 
needs to be added, I think, and that will fix Brad's issue as well:

 

else

                {

                    // was no special key, let WM_CHAR handle it

                    _keypresshandled = false;

                    _lastkeysymbol = keySymbol;

                            /* the new line */ 
getEventQueue()->keyPress(keySymbol, eventTime);

                }

 

This was the key that was waste (being 'eaten' :) ..). 

 

So to me it sounds that, with Vivien's submission, only the dead key + 
'something' was not firing an event in osg - for the rest it should work as 
before, not  as Brad states above that the key events stopped work. I am very 
curious what he was actually doing.

 

Cheers,

-Nick

On Fri, Sep 17, 2010 at 8:04 PM, Vivien Delage <vdel...@gmail.com> wrote:

Hi guys,

I understand you Robert. I have no problem with reverting the code for now if 
this causes issues for other people. I will go and experiment a bit more on how 
to fix the dead key problem. Maybe I can find a solution which is not using the 
WM_CHAR message. I will let you know how it goes on my side.


Cheers,

Vivien

------------------
Read this topic online here:

http://forum.openscenegraph.org/viewtopic.php?p=31778#31778






_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

 


_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

 


_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

 

 


_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

 

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to