15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Accelerators in modeless _property sheet_

Jeff Wishnie -- jwishnie@swellsoft.com
Friday, September 06, 1996

Environment: VC++ 4.2, WIN95

I have several modeless Property Sheet's in my application and I'd like
accelerator keys to function even when the sheets are active.

I've looked at KB article: Q117500
"Using Accelerators with an MFC Modeless Dialog Box"

Which explains that to get accelerators to work in a modeless dialog, just
override PreTranslateMessage to pass the key event to the mainframes
accel-table.

I tried a similar approach with the modeless property sheet overriding
pretranslate message on all the following:

the CMiniFrameWnd that holds the sheet
the CPropertySheet subclass
each CPropertyPage subclass

But none of these methods are called.

Spy++ verifies that the WM_KEYDOWN and WM_KEYUP messages that should issue
the accelerator are caught by the current focused control in the sheet, not
by the Frame, Sheet, or Pages.

Is there any way to get these messages before they are distributed to the
focused control? I'd hate to have to write special button, list, slider,
etc... subclasses just to trap this message!

Thanks for any help.

- Jeff
jwishnie@swellsoft.com





Steve Mark -- steve@otms.com
Sunday, September 08, 1996

Jeff,

FWIW: I have the same problem in 1.52.  Here's what I put in my property
sheet class to get the mainframe menu accelerators to work (note:
accelerators on controls in the property sheet still do not work):

BOOL CMySheet::PreTranslateMessage(MSG* pMsg)
{
        HACCEL hAccel = ((CMainFrame*)AfxGetMainWnd())->GetAccelTable();
            
        if(hAccel && ::TranslateAccelerator(AfxGetMainWnd()->m_hWnd,
hAccel, pMsg))
     	      return TRUE;
	 else
	      return AfxGetMainWnd()->PreTranslateMessage(pMsg);
}

Steve

At 02:48 PM 9/6/96 -0700, you wrote:
>Environment: VC++ 4.2, WIN95
>
>I have several modeless Property Sheet's in my application and I'd like
>accelerator keys to function even when the sheets are active.
>
>I've looked at KB article: Q117500
>"Using Accelerators with an MFC Modeless Dialog Box"
>
>Which explains that to get accelerators to work in a modeless dialog, just
>override PreTranslateMessage to pass the key event to the mainframes
>accel-table.
>
>I tried a similar approach with the modeless property sheet overriding
>pretranslate message on all the following:
>
>the CMiniFrameWnd that holds the sheet
>the CPropertySheet subclass
>each CPropertyPage subclass
>
>But none of these methods are called.
>
>Spy++ verifies that the WM_KEYDOWN and WM_KEYUP messages that should issue
>the accelerator are caught by the current focused control in the sheet, not
>by the Frame, Sheet, or Pages.
>
>Is there any way to get these messages before they are distributed to the
>focused control? I'd hate to have to write special button, list, slider,
>etc... subclasses just to trap this message!
>
>Thanks for any help.
>
>- Jeff
>jwishnie@swellsoft.com
>
>
>
>




| Вернуться в корень Архива |