Отправьте двойной щелчок в список (С++, а не .net!)

Я хочу отправить двойной щелчок в список. Из того, что я прочитал в msdn, кажется, мне нужно отправить сообщение WM_NOTIFY и что-то с NM_DBLCLK. Но я не очень хорошо понимаю, как это реализовать. Я работал с SendMessage раньше, но MSDN не совсем ясно, как заполнять структуры и так:

WM_NOTIFY http://msdn.microsoft.com/en-us/library/bb775583(VS.85).aspx NM_DBLCLK http://msdn.microsoft.com/en-us/library/bb774867(VS.85).aspx


person Jorge Branco    schedule 10.06.2009    source источник


Ответы (4)


Я подозреваю, что вы идете по неверному пути. Вероятно, лучший способ отправить сообщение о двойном щелчке — это отправить два одиночных щелчка, один сразу после другого. У этого есть наилучшие шансы работать и не удивлять приложение уведомлением о двойном щелчке на ровном месте.

Если вы хотите отправить уведомление в родительское окно, это может помочь вам начать:

NMITEMACTIVATE activate={0};
activate.hdr.hwndFrom = hWnd; // of the list view control
activate.hdr.idFrom = id; // of the list view control
activate.hdr.code = NM_DBLCLK;

activate.iItem = iItem; // the id of the list item to click
activate.iSubItem = iSubItem;
activate.ptAction = ptAction; // where the event occurred

::SendMessage(hWndParent, WM_NOTIFY, id, reinterpret_cast<LPNMITEMACTIVATE>(&activate));
person 1800 INFORMATION    schedule 10.06.2009
comment
Сообщение для одиночного щелчка точно такое же, как и для двойного щелчка, NM_LCLK. Я не понимаю. Конечно, я могу сделать WM_LBUTTONDBLCLK, но для этого мне нужно, чтобы выбранный элемент отображался на экране, чего я хотел бы избежать, если это возможно. - person Jorge Branco; 10.06.2009
comment
Сообщение уведомления отправляется из представления списка в родительский элемент управления. Нет смысла отправлять его в список. Вы хотите отправить его родителю? - person 1800 INFORMATION; 10.06.2009
comment
Думаю, я понял вашу точку зрения. Я думал, что это возможно таким образом. Спасибо - person Jorge Branco; 10.06.2009

WM_NOTIFY отправляется родительскому элементу управления элементом управления, чтобы сообщить родителю о том, что произошло событие. Вы ничего не добьетесь, отправив его на само управление.

В противном случае я действительно не понимаю, что вы пытаетесь сделать. Не могли бы вы уточнить?

person avakar    schedule 10.06.2009
comment
У меня есть список в другой программе, которая при двойном щелчке открывает окно. Вот почему мне нужно дважды щелкнуть представление списка. - person Jorge Branco; 10.06.2009
comment
Я понимаю. В этом случае 1800 INFORMATION уже предоставила вам решение. - person avakar; 10.06.2009

может быть лучше генерировать события мыши на уровне драйвера с помощью API mouse_event вместо отправки поддельных сообщений WM_MOUSE http://msdn.microsoft.com/en-us/library/ms646260%28VS.85%29.aspx

person Luca Rocchi    schedule 01.03.2010

Мы можем использовать симуляцию щелчка мыши, используя следующие функции:

mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN, X, Y,0,0);
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP, X, Y,0,0);
person MinYun    schedule 26.12.2010