Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

EditBox и кнопка Enter

318
18 ноября 2007 года
nof
193 / / 03.04.2006
Ребят, как сделать, чтобы если EditBox находится в фокусе (то есть в него осущеуствляется ввод с клавиатуры текста), при нажатии на Enter, выполнялась некая функци func() вместо перехода на след строчку?
350
19 ноября 2007 года
cheburator
589 / / 01.06.2006
Если речь идет не об обычном окне, а о диалоге, будет срабатывать нажатие на Default button, т. е. вызывается обработчик кнопки, которая в диалоге прописана как Default button. Если, конечно, речь идет об однострочном Edit'е.
318
19 ноября 2007 года
nof
193 / / 03.04.2006
Цитата: cheburator
Если речь идет не об обычном окне, а о диалоге, будет срабатывать нажатие на Default button, т. е. вызывается обработчик кнопки, которая в диалоге прописана как Default button. Если, конечно, речь идет об однострочном Edit'е.


Нет, в editbox осуществляется ввод данных, то есть при нажатии Enter просто ввод перейдёт на следующую строчку. Default button не нажмётся никак...
В том то и вопрос =)

33K
19 ноября 2007 года
VK77
2 / / 16.11.2007
Замени WndProc на свою:


hEditWnd - хэндл edit box окна

Код:
WNDPROC oldeditproc;

...

LRESULT CALLBACK NewEditWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == WM_KEYDOWN && wParam == VK_RETURN)
    {
      // вызвать нужную функцию тут
      // или можно послать WM_COMMAND родительскому окну
      return 0;
    }
    return CallWindowProc(oldeditproc, hWnd, message, wParam, lParam);
}

...

OldWndProc = (WNDPROC)SetWindowLongPtr(hEditWnd, GWLP_WNDPROC, (LONG_PTR)NewEditWndProc);
318
20 ноября 2007 года
nof
193 / / 03.04.2006
Цитата: VK77
Замени WndProc на свою:


hEditWnd - хэндл edit box окна

Код:
WNDPROC oldeditproc;

...

LRESULT CALLBACK NewEditWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    if (message == WM_KEYDOWN && wParam == VK_RETURN)
    {
      // вызвать нужную функцию тут
      // или можно послать WM_COMMAND родительскому окну
      return 0;
    }
    return CallWindowProc(oldeditproc, hWnd, message, wParam, lParam);
}

...

OldWndProc = (WNDPROC)SetWindowLongPtr(hEditWnd, GWLP_WNDPROC, (LONG_PTR)NewEditWndProc);


У меня классовое приложение... MFC.

Делаю также, только:

 
Код:
oldeditproc = (WNDPROC)SetWindowLongPtr(GetDlgItem(IDC_EDIT2)->GetSafeHwnd(),GWLP_WNDPROC, (LONG_PTR)NewEditWndProc);


При компиляции получаю варнинги на эту функцию:
1.cpp(40) : warning C4244: 'argument' : conversion from 'LONG_PTR' to 'LONG', possible loss of data
1.cpp(40) : warning C4312: 'type cast' : conversion from 'LONG' to 'WNDPROC' of greater size

Ну и как следствие, при запуске программа падает на ней...
В чём может быть дело?
430
24 ноября 2007 года
craftyfox
157 / / 20.02.2000
а средствами MFC обработать WM_KEYDOWN не судьба?
318
26 ноября 2007 года
nof
193 / / 03.04.2006
Цитата: craftyfox
а средствами MFC обработать WM_KEYDOWN не судьба?



 
Код:
void CDlg1::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    if(nChar == VK_RETURN) {
        MessageBoxA("A","A", 0);
    }

    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}


Вот такое сделал. Ноль реакции при нажатии Enter...
430
26 ноября 2007 года
craftyfox
157 / / 20.02.2000
а почему именно в классе диалога? фокус то у edit'a?
Можно создать для него свой класс, наследующий CEdit,

можно как здесь объясняется:
http://msdn2.microsoft.com/en-us/library/f7yhsd2b(VS.80).aspx

возможно, удасться отловить WM_KEYDOWN в PreTranslateMessage,
возможно, даже диалога, или объекта Application
1.8K
26 ноября 2007 года
CilCatblack
251 / / 20.09.2007
Попробуй вот так::)
 
Код:
...
void CDlg1::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == VK_RETURN) {
int status = MessageBox( "Нажат Enter", "Enter", MB_OKCANCEL | MB_ICONQUESTION );;
}

CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог