Где ресурс Win32 для курсора мыши для перетаскивания разделителей? - PullRequest
2 голосов
/ 06 сентября 2008

Я создаю пользовательский элемент управления / виджет win32 и хотел бы изменить курсор на горизонтальный символ «разделитель» при наведении курсора на определенную вертикальную линию в элементе управления. IE: я хочу перетащить эту вертикальную линию (разделитель) влево и вправо (ЗАПАД и ВОСТОК).

Из системных курсоров (OCR_ *) единственным разумным курсором является OCR_SIZEWE. К сожалению, это большой, неуклюжий курсор, который система использует при изменении размера окна. Вместо этого я ищу курсор около 20 пикселей в высоту и около 3 или 4 пикселей в ширину с двумя маленькими стрелками, указывающими влево и вправо.

Я легко могу нарисовать это и включить его в качестве ресурса в свое приложение, но сам курсор настолько распространен, что я хотел быть уверен, что он ничего не пропустил.

Например: когда вы используете механизм перетаскивания COM (CLSID_DragDropHelper, IDropTarget и т. Д.), Вы неявно получаете доступ к значку «перетаскивания» (маленькое поле под указателем). Я не видел явной константы OCR_ * для этого парня ... так же, если я не могу найти этот курсор сплиттера сразу, мне интересно, является ли он частью COM-объекта или чем-то еще в win32 lib.

Ответы [ 2 ]

4 голосов
/ 06 сентября 2008

В пользовательском интерфейсе Windows используются всевозможные значки, курсоры и изображения, которые не доступны для стороннего программного обеспечения. Конечно, вы все равно можете загрузить модуль, в котором они находятся, и использовать их, но на самом деле нет никакой гарантии, что ваша программа продолжит работать после обновления / обновления системы.

Включите свой собственный. Последнее, что вам нужно, это добавить дополнительную зависимость крошечному курсору.

0 голосов
/ 07 сентября 2008

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

SetCursor( LoadCursor( ghInstance, "IDC_SPLITVERT" ));

Я смутно помню, как потратил немало времени и усилий, чтобы найти системный способ сделать это, так что (мое предположение) заключается в том, что нет системы ICON, легко доступной для выполнения этой работы, так что вам лучше кататься самостоятельно.

Это один из тех случаев, когда я хотел бы ошибаться, поскольку мне бы хотелось, чтобы для этой работы был системный значок.

...