Смена фокуса управления CDialog из другого диалога

Я пытаюсь изменить фокус элементов управления CDialog из CFormView с помощью PostMessage:

[CHelpView наследуется от CFormView. И m_wndDlg является объектом CSampleDlg(унаследованным от CDialog)]

void CHelpView::OnEnterbutton() 
{
    pSplitterFrame->m_dlgPane->m_wndDlg->PostMessage(WM_KEYDOWN, 'r', 2); 
}

BOOL CSampleDlg::PreTranslateMessage(MSG* pMsg) 
{
    if (pMsg->message >= WM_KEYFIRST && // for performance
        pMsg->message <= WM_KEYLAST)
    { 
         if (pMsg->wParam=='r' && pMsg->lParam==2){
            NextDlgCtrl();
            return TRUE; 
         }
    }
}

Диалог получает сообщение, но метод NextDlgCtrl не меняет фокус. Я понял, что если я изменю метод PreTranslateMessage, чтобы при нажатии клавиши Return в диалоге этот метод NextDlgCtrl правильно изменял фокусировку каждый раз, когда пользователь нажимал клавишу возврата (из диалога). Но этого я не смог достичь с помощью другого диалога.

Кто-нибудь, возможно, знает причину этого или какие-либо намеки или обходной путь?

Благодарю.

РЕДАКТИРОВАТЬ:

Вот (часть) файл журнала для диалога от SPY ​​++.

<01128> 0016013E R WM_GETDLGCODE fuDlgCode: 0000

<01129> 0016013E P WM_KEYDOWN nVirtKey: 00726574 cRepeat: 2 ScanCode: 00 fExtended: 0 fAltDown: 0 fRepeat: 0 fUp: 0

<01130> 0016013E S WM_NEXTDLGCTL wCtlFocus: (ноль) (следующий элемент управления получает фокус) fHandle: False

<01131> 0016013E R WM_NEXTDLGCTL

<01132> 0016013E S WM_GETDLGCODE

2 ответа

Вы публикуете значение lParam 2, но проверяю '2' -- Они не то же самое!

Пытаться

if (pMsg->wParam == 'r' && pMsg->wParam == 2)

РЕДАКТИРОВАТЬ: понял после ответа Rrirower: это должно быть, конечно,

if (pMsg->wParam == 'r' && pMsg->lParam == 2)

Ваш обработчик PreTranslateMessage, как написано, никогда не будет работать. Эта строка,

if (pMsg->wParam=='r' && pMsg->wParam==2){
            NextDlgCtrl();
            return TRUE; 

никогда не может быть правдой. Как pMsg->wParam может равняться двум значениям одновременно? Я думаю, что вы хотели проверить на lParam?

Другие вопросы по тегам