На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Как отловить событие выделения текста в Edit?, WinAPI, без MFC, без ресурсов
    Как отловить событие выделения текста в Edit?
    Это нужно чтобы при наличии выделенного текста в Edit становились доступными кнопки на панели: вырезать|копировать|удалить.
    EN_CHANGE не подходит - оно при изменении текста, а выделение текста ?
    Сообщение отредактировано: E.A. -
      Мои программные ништякиhttp://majestio.info
        В Word-е похоже на то, что реакция кнопок на выделение текста происходит при отпускании левой кн.мыши, ну и стрелками при нажатии через Shift можно выделить текст...
        Получается нужно обрабатывать WM_LBUTTONUP для мыши и WM_KEYDOWN для клавиш стрелок
        Я ничего не упускаю ?
        Добавлено
        Цитата
        EM_GETSEL
        Это когда я хочу подсчитать сколько символов выделено, да оно есть внутри функции ToolbarEnabled() которая определяет что нужно/не нужно делать доступными кнопки.
        А вот сам момент когда эту функцию ToolbarEnabled() запускать...

        Добавлено
        ExpandedWrap disabled
          void ToolbarEnable()
          {
              int n;
              DWORD dwstart, dwend;
              SendMessage(e::linkhwnd[3], EM_GETSEL, (WPARAM) &dwstart, (LPARAM) &dwend); // <--- вот она EM_GETSEL ))
              n = (int) (dwend - dwstart);
              if (n != 0)
              {
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_CUT, (LPARAM) MAKELONG(TBSTATE_ENABLED, 0));
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_COPY, (LPARAM) MAKELONG(TBSTATE_ENABLED, 0));
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_DELETE, (LPARAM) MAKELONG(TBSTATE_ENABLED, 0));
              }
              else
              {
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_CUT, (LPARAM) MAKELONG(TBSTATE_INDETERMINATE, 0));
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_COPY, (LPARAM) MAKELONG(TBSTATE_INDETERMINATE, 0));
                  SendMessage(e::linkhwnd[0], TB_SETSTATE, (WPARAM) IDM_LINK_DELETE, (LPARAM) MAKELONG(TBSTATE_INDETERMINATE, 0));
              }
          }
        Сообщение отредактировано: E.A. -
          Цитата E.A. @
          А вот сам момент когда эту функцию ToolbarEnabled() запускать...

          Наверное по EN_SELCHANGE
          https://docs.microsoft.com/en-us/windows/wi...ls/en-selchange
          Сообщение отредактировано: JoeUser -
          Мои программные ништякиhttp://majestio.info
            ExpandedWrap disabled
              EN_SELCHANGE // по названию - то что нужно!

            но почему-то оно не определяется, что за ерунда... хотя когда курсор подведен - определяется.
            Добавлено
            JoeUser спасибо за наводку, попробую поискать в этом направлении

            Добавлено
            ExpandedWrap disabled
                  case WM_NOTIFY:
                      switch (((LPNMHDR)lparam)->idFrom)
                      {
                      case 1003:
                          switch (((LPNMHDR)lparam)->code)
                          {
                          case EN_SELCHANGE:
                              ToolbarEnable();
                              break;
                          }
                          break;
                      }
                      break;
                      //...

            так пожалуй лучше, но всё равно не находит что такое EN_SELCHANGE

            А-а так это для rich edit, понятно почему не находит для простого edit, его ещё в заголовке подключать надо, вспоминаю там еще разные версии этих rich edit есть... может он и не плох, но у меня уже на простом edit-е все сделано и протестировано, пожалуй остановлюсь на обработке событий WM_LBUTTONUP для мыши и WM_KEYDOWN для срелок.
            Сообщение отредактировано: E.A. -
              К обработке событий WM_LBUTTONUP для мыши и WM_KEYDOWN для срелок, добавил ещё события получить фокус и потеря фокуса и всё нормально работает.
              Вопрос решен.
                Цитата E.A. @
                ExpandedWrap disabled
                  EN_SELCHANGE // по названию - то что нужно!

                но почему-то оно не определяется, что за ерунда... хотя когда курсор подведен - определяется.

                А вообще - как бы это мог реализовать программист
                самой Виндус. (Да и программист для Виндус)

                ... Идёт процесс выделения текста в Эдит.
                Это делает человек, поэтому всё происходит "медленно".
                Когда послать сообщение ? Не понятно, как можно определить,
                что действия по выделению завершены.

                Когда выделен хоть один символ ? - но тогда не выделены
                остальные, и сколько их будет и когда этот процесс закончится - не известно.

                Посылать сообщение после каждого выделенного символа ? - те же проблемы,
                что и выше и к тому же может быть мы весь документ (из 50 М) хотим
                выделить и сколько будет тогда сообщений !
                Подпись была выключена в связи с наложенным заземлением.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script Execution time: 0,0908 ]   [ 15 queries used ]   [ Generated: 21.11.19, 05:16 GMT ]