свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: CEMb  
Дата: 28.11.18 10:58
Оценка:
Такой вопрос, в свою оконную процедуру прилетает WM_KEYDOWN (Ctrl key) + WM_CHAR (что-то странное) вместо WM_CUT/WM_COPY при нажатии Ctrl+X/Ctrl+C

Что-то сходу не соображу, что сделать, чтобы в окно стали лететь сообщения?
Пока писал, подумал: IsDialogMessage, возможно...
also, it's desktop photo frame
Re: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: Carc Россия Aml Pages — оперативный блокнот http://www.amlpages.com/home.php
Дата: 28.11.18 12:24
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Такой вопрос, в свою оконную процедуру прилетает WM_KEYDOWN (Ctrl key) + WM_CHAR (что-то странное) вместо WM_CUT/WM_COPY при нажатии Ctrl+X/Ctrl+C


CEM>Что-то сходу не соображу, что сделать, чтобы в окно стали лететь сообщения?

CEM>Пока писал, подумал: IsDialogMessage, возможно...

An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection, if any, in the edit control and copy the deleted text to the clipboard in CF_TEXT format.

Может они приходят только в Edit и ComboBox автоматом, и только? Тогда можно предположить, что автоматом Винда определяет это по классу окна, а в других случаях (свой контрол, свой класс окна, со своим именем) не делает ничего!?!
Aml Pages Home
Re: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: Evgeniy Skvortsov Россия  
Дата: 28.11.18 12:42
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Такой вопрос, в свою оконную процедуру прилетает WM_KEYDOWN (Ctrl key) + WM_CHAR (что-то странное) вместо WM_CUT/WM_COPY при нажатии Ctrl+X/Ctrl+C


Так там же написано, что это приложение шлет сообщение в контрол, а не винда. И edit на пару с combobox умеют их обрабатывать.

An application sends a WM_CUT message to an edit control or combo box to delete (cut) the current selection


Хотя нет, проверил, сообщение прилетает в EDIT от винды, странно.
Отредактировано 28.11.2018 14:21 Evgeniy Skvortsov . Предыдущая версия .
Re: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: Evgeniy Skvortsov Россия  
Дата: 28.11.18 17:08
Оценка: 16 (3)
Здравствуйте, CEMb, Вы писали:

CEM>Такой вопрос, в свою оконную процедуру прилетает WM_KEYDOWN (Ctrl key) + WM_CHAR (что-то странное) вместо WM_CUT/WM_COPY при нажатии Ctrl+X/Ctrl+C


CEM>Что-то сходу не соображу, что сделать, чтобы в окно стали лететь сообщения?

CEM>Пока писал, подумал: IsDialogMessage, возможно…

Интересно стало, глянул исходники винды (ну те старые которые утекли сто лет назад)
В общем EDIT контрол сам себе шлет эти сообщения. Банально в обработчике WM_KEYDOWN проверяет нажат ли Ctrl и ставит флаг, и дальше в обработчике WM_CHAR проверяет что если нажата комбинация Ctrl-X и прочее, то шлет сам себе WM_CUT
  кусок исходника Windows_2000_source_code\private\ntos\w32\ntuser\client\editml.c
    /*
     * Handle key codes
     */
    switch(keyPress) {
    UINT msg;

    // Ctrl+Z == Undo
    case 26:
        msg = WM_UNDO;
        goto SendEditingMessage;
        break;

    // Ctrl+X == Cut
    case 24:
        if (ped->ichMinSel == ped->ichMaxSel)
            goto IllegalChar;
        else
        {
            msg = WM_CUT;
            goto SendEditingMessage;
        }
        break;

    // Ctrl+C == Copy
    case 3:
        msg = WM_COPY;
        goto SendEditingMessage;
        break;

    // Ctrl+V == Paste
    case 22:
        msg = WM_PASTE;
SendEditingMessage:
        SendMessage(ped->hwnd, msg, 0, 0L);
        break;


Так что это не в винду глобальная особенность встроена, а просто так сам EDIT контрол реализован. У себя сделай так же. Отлавливай эти нажатия и шли своему окну эти сообщения.
Отредактировано 28.11.2018 17:15 Evgeniy Skvortsov . Предыдущая версия .
Re: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: CEMb  
Дата: 28.11.18 17:08
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Пока писал, подумал: IsDialogMessage, возможно...


Не, оно прилетает и в отдельно висящий Edit

C>Может они приходят только в Edit и ComboBox автоматом, и только? Тогда можно предположить, что автоматом Винда определяет это по классу окна, а в других случаях (свой контрол, свой класс окна, со своим именем) не делает ничего!?!


ES>Хотя нет, проверил, сообщение прилетает в EDIT от винды, странно.


Вот как-то по классу окна оно понимает, что вместо ctrl+c надо слать wm_copy

Возможно, надо что-то волшебное в RegisterClass сказать.
also, it's desktop photo frame
Re[2]: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: Evgeniy Skvortsov Россия  
Дата: 28.11.18 17:10
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Возможно, надо что-то волшебное в RegisterClass сказать.


Не, все проще, EDIT эти сообщения сам себе шлет. Так что только руками. Документация не врет.
Re[3]: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: CEMb  
Дата: 28.11.18 17:23
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

CEM>>Возможно, надо что-то волшебное в RegisterClass сказать.


ES>Не, все проще, EDIT эти сообщения сам себе шлет. Так что только руками. Документация не врет.


Ага, я чуть позже запостил, поэтому не увидел.
Про исходники винды я тоже уже подумал, но куда-то их потерял
also, it's desktop photo frame
Re[4]: свой контрол и wm_cut/wm_copy/wm_clear/wm_paste
От: Evgeniy Skvortsov Россия  
Дата: 28.11.18 17:26
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Про исходники винды я тоже уже подумал, но куда-то их потерял


Да они до сих пор по всему инету валяются, я скачал с какого-то торента за 5 сек.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.