Hi again Brad,

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

<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 <
[email protected]> 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 <[email protected]> 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:* [email protected] [mailto:
>> [email protected]] *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 <[email protected]>
>> 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:* [email protected] [mailto:
>> [email protected]] *On Behalf Of *Trajce (Nick)
>> Nikolov
>> *Sent:* Friday, September 17, 2010 10:57 AM
>>
>>
>> *To:* [email protected]
>> *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 <[email protected]> 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
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to