[C++] Проблема с обработкой нажатий клавиш MFC

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by agrofyl2, 23 Jul 2010.

  1. agrofyl2

    agrofyl2 New Member

    Joined:
    25 Apr 2008
    Messages:
    54
    Likes Received:
    4
    Reputations:
    0
    Есть 2 класса, в разных cpp
    1) Главный class CCLASS_App : public CWinApp
    2) Класс диалога class CCLASS_Dlg : public CDialog

    В главном написано
    Code:
    CCLASS_Dlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    Пытаюсь обработать нажатие клавиши вот так:

    Code:
    BOOL CCLASS_Dlg::PreTranslateMessage ( MSG* pMsg )
    {
        if((WM_KEYDOWN == pMsg->message) && (VK_RETURN == pMsg->wParam))
        {
    		MessageBox("Hi");
    		return TRUE;       // запрет дальнейшей обработки
        }
        // стандартная обработка сообщения
       return CWinApp::PreTranslateMessage(pMsg);
    }
    (вставлено во 2 класс)

    Но компилятор ругается
    error C2352: 'CWinThread::preTranslateMessage' : illegal call of non-static member function

    Если же обьявить эту функцию в главном классе - то все работает.

    Как сделать, чтобы код работал (обрабатывались нажатия только от 2 диалога)?
     
  2. agrofyl2

    agrofyl2 New Member

    Joined:
    25 Apr 2008
    Messages:
    54
    Likes Received:
    4
    Reputations:
    0
    ой, народ, извините за столь глупый вопрос. проблему решил - надо написать так
    2Модератор: тему можно потереть
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    agrofyl2 не порть себе мозг вымершим диалектом MFC.
    Если ты настоящий нерд клепай windows интерфейсы на ассемблере (с использованием winapi)

    А если тянет делать нормальные проги, но с кучей диалогов и ты не хочешь деградировать с RAD, изучай новые перспективные языки типа C# .NET, JAVA и популярный нынче python к которому можно привинтить QT, GTK и прочую графическую ересь.

    Интерфейс зло! консоль наше все - в край заюзай ncurses или его аналог под win если найдешь )
     
    _________________________