Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Как перехватить клавиши со стрелками в Edit диалогового окна

Для этого проделаем следующие шаги:

  1. Наследуем диалоговый класс от CDialog. Например, можно создать диалоговый класс CMyDlg:public CDialog при помощи визарда.

  2. Создаём собственный edit класс и перехватываем WM_GETDLGCODE и WM_KEYDOWN. Код будет выглядеть следующим образом:
          class CMyEdit : public CEdit
           {
           // Construction
           public:
                CMyEdit();
     
           public:
                virtual ~CMyEdit();
           protected:
                afx_msg UINT OnGetDlgCode();
                afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
                DECLARE_MESSAGE_MAP()
           };
     
           CMyEdit::CMyEdit()
           {
           }
     
           CMyEdit::~CMyEdit()
           {
           }
     
           BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
                ON_WM_GETDLGCODE()
                ON_WM_KEYDOWN()
           END_MESSAGE_MAP()
     
           UINT CMyEdit::OnGetDlgCode()
           {
     
                return DLGC_WANTARROWS|DLGC_WANTALLKEYS|DLGC_WANTCHARS;
           }
     
           void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
          {
                //Проверяем, если нажатая клавиша была СТРЕЛКА ВНИЗ
                if (nChar == VK_DOWN)
                     AfxMessageBox("It is a down arrow key!");
                if (nChar == VK_RIGHT)
                     AfxMessageBox("It is a right arrow key!");
                if (nChar == VK_LEFT)
                     AfxMessageBox("It is a left arrow key!");
                if (nChar == VK_UP)
                     AfxMessageBox("It is a up arrow key!");
                CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
           } 

    ЗАМЕЧАНИЕ: если для добавления класса CMyEdit использовался визард, то сначала этот класс надо наследовать от CWnd, а затем вручную изменить родителя с CWnd на CEdit. Это важно для перехвата WM_GEDLGCODE в Вашем собственно edit классе, а также указать DLGC_WANTARROWS в OnGetDlgCode().

  3. В диалоговом классе создаём переменную-член, которая авляется экземпляром Вашего edit класса и переопределяем CWnd::DoDataExchange(). Код будет выглядеть следующим образом:
          class CMyDlg : public CDialog
           {
           public:
                CMyEdit m_edit;
           protected:
                virtual void DoDataExchange(CDataExchange* pDX); //DDX/DDV
     
                DECLARE_MESSAGE_MAP()
           };
           void CMyDlg::DoDataExchange(CDataExchange* pDX)
           {
                CDialog::DoDataExchange(pDX);
                DDX_Control(pDX, IDC_EDIT1, m_edit);
           } 

    Обратите внимание: Это можно просто сделать при помощи визарда. Например, можно добавить переменную m_edit и связать её с CEdit а затем вручную изменить CEdit в файлах MyEdit.CPP и MyEdit.H на CMyEdit.

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS