Мне нужно обрабатывать щелчек мыши на определенной ячейки в ListView. Строку определить просто, а вот для определения столбца обрабатываю WM_LBUTTONDOWN, определяю позицию мыши в экранных коородинатах, перевожу в экранные координаты положение столбца и сравниваю. Все работает здорово, пока не появляется у ListView горизонтальная линейка прокрутки. Позиция столбца считается от начала ЭУ ListView, поэтому можно сделать (задав соответствующую ширину столбца) чтобы столбец начинался например с 1500-ого пикселя (при горизонтальном разрешени 1024). Прокрутив горизолнтальную линейку прокрутки на этот столбец нажаите кнопки мыши по нем ни к чему не приведет (что не удивительно, ведь горизонтальное положение мыши не превосходит 1024, а нужный мне столбец начинается с 1500).
Вот и вопрос: как можно определить смещение в пикселях, на которое прокручен текущий список по горизонтали?
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
> Вот и вопрос: как можно определить смещение в пикселях, на которое прокручен текущий список по горизонтали?
>
Не тем путём идёшь!!!
Глянь в сторону
LVM_HITTEST и
LVM_SUBITEMHITTEST!!!
Posted via RSDN NNTP Server 1.9
Здравствуйте, DreamWeaver, Вы писали:
DW> Мне нужно обрабатывать щелчек мыши на определенной ячейки в ListView. Строку определить просто, а вот для определения столбца
поставь обработчик на NM_CLICK, NM_RCLICK или NM_DBLCLK, смотря что тебе надо, в уведомлении тебе придет
NMHDR * pNMHDR, приводишь его к NMLISTVIEW* и получаешь subitem:
LPNMLISTVIEW pNMLV = ( LPNMLISTVIEW ) pNMHDR;
/*
typedef struct tagNMLISTVIEW{
NMHDR hdr;
int iItem;
int iSubItem; // voila!
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, FAR *LPNMLISTVIEW;
*/
чтоб это работало, для listview должен быть установлен расширенный стиль
LVS_EX_FULLROWSELECT