Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > добавление в дерево


Автор: Rickert 1.10.2008, 08:32
Есть диалог. По действию из меню заполняет CTreeCtrl неопред. кол-во элементов.
В этом же диалоге есть ещё одно дерево и стоит обработка PreTranslateMessage, в которой отлавливается нажатие клавишь.
До заполнения первого дерева, при нажатии клавишь, всё нормально, но после заполнения появляются звуки как будто где-то предупреждение вываливается. При этом, если я меняю фокус первого дерева на второе (которое пустое) - просто тыкаю мышкой в него: звуки исчезают. Перехожу фокусом обратно на первое - опять появляются. Есть два вопроса:
0) Почему вдруг музыкальное сопровождение?
1) Как убрать фокус програмно?

Автор: Earnest 1.10.2008, 12:13
1) Виндоус пищит, если клавиатурный или мышиный ввод приходит в окно, которое его не принимает
2) Фокус можно не убрать, а переставить (где-то он должен быть) - SetFocus

Автор: Rickert 1.10.2008, 15:51
Цитата(Earnest @  1.10.2008,  12:13 Найти цитируемый пост)
1) Виндоус пищит, если клавиатурный или мышиный ввод приходит в окно, которое его не принимает

Видимо я что-то не так думаю?
Код
BOOL aDialogTcejbo::PreTranslateMessage(MSG* msg)
{
  if (msg->message == WM_KEYDOWN)
  {
    if (msg->wParam == VK_RETURN)
      return 0;

    if (msg->wParam == VK_ESCAPE)
      return 0;

    if (msg->wParam == 'W')
      rendering.camera.acMoveCamera(rendering.asGetCameraSpeed());
    if (msg->wParam == 'S')
      rendering.camera.acMoveCamera((-rendering.asGetCameraSpeed()));
    if (msg->wParam == 'A')
      rendering.camera.acStrafeCamera((-rendering.asGetCameraSpeed()));
    if (msg->wParam == 'D')
      rendering.camera.acStrafeCamera(rendering.asGetCameraSpeed());
    if (msg->wParam == 'Q')
      rendering.camera.acMoveCameraUp((-rendering.asGetCameraSpeed()));
    if (msg->wParam == 'E')
      rendering.camera.acMoveCameraUp(rendering.asGetCameraSpeed());
  }

  return CDialog::PreTranslateMessage(msg);
}

Давлю, в частности: Q и E

Автор: Earnest 1.10.2008, 17:19
Не поняла, в чем вопрос? Символы-то все равно попадают в текущее окно ввода, несмотря на все твои ifы...

Автор: Rickert 2.10.2008, 05:33
Earnest, хорошо, тогда так: как принимать этот ввод, избавиться от писка?

Автор: Earnest 2.10.2008, 08:27
Цитата(Rickert @  1.10.2008,  09:32 Найти цитируемый пост)
При этом, если я меняю фокус первого дерева на второе (которое пустое) - просто тыкаю мышкой в него: звуки исчезают

Сам ведь ответил...
Можно еще в PreTranslate, если фокус в пищищем дереве, не отдавать сообщения базовому обработчику, а возвращать TRUE (чтобы сообщение больше не обрабатывалось).

Автор: Rickert 3.10.2008, 04:01
Цитата(Earnest @  2.10.2008,  08:27 Найти цитируемый пост)
Можно еще в PreTranslate, если фокус в пищищем дереве, не отдавать сообщения базовому обработчику, а возвращать TRUE (чтобы сообщение больше не обрабатывалось)

Вот что значит: "Учить мат. часть сынок!". Спасибо, как всегда выручаешь советом smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)