Что такое код loadcursor

Содержание

Что такое код loadcursor

в хелпе написано поставить в null — class cursor for the specified window»s class is set to NULL. Это как?

Дык как сказано так и пиши NULL или 0

Так а что в 0 устанавливать?
в хелпе написано, что setcursor меняет курсор, но до обработки WM_MOUSEMOVE, а потом возвращается стандартные и вот чтобы этого не произошло, нужно установить (ЧТО?) в нуль перед использованием SetCursor

Когда ты создаешь класс окна функцией RegisterClass(CONST WNDCLASS* lpwc) надо параметр hCursor в структуре WNDCLASS ставить в NULL для предотвращения мерцания при применении функции SetCursor.

hCursor: Дескриптор курсора, который предназначен для этого класса окна. Если это значение установлено в NULL, приложение должно устанавливать курсор каждый раз, когда курсор мыши уходит за пределы окна.

А я сам ничего не создаю — у меня всё в ресурсах описано.
И когда я хочу менять курсор, то диалог у меня уже создан.

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

Я так понял ты хочешь запихать свой курсор, раз не ползуешься Form1.Cursor?

wxWidgets в Windows: как создать wxCursor из номера ресурса приложения?

Я переписываю приложение, используя wxWidges (native C++). У меня есть несколько пользовательских курсоров мыши, созданных с помощью редактора ресурсов Visual Studio. Редактор ресурсов создает для каждого файла файл MYCURSOR.CUR с растровым изображением и другой информацией, добавляет одну запись в файл app.rc например:

. и добавляет одну строку к сгенерированному resource.h h:

Когда приложение компилируется, скомпилированные ресурсы берут двоичную форму, которая становится неотъемлемой частью app.exe . Когда структура wxWidgets не используется, можно вызвать:

где hInstance — это дескриптор приложения, у которого есть исполняемый файл с ресурсом курсора (в скомпилированной двоичной форме, здесь, в app.exe ).

С wxWidgets я могу создать экземпляр класса wxCursor и передать ему имя файла с помощью курсорного курсора wxCursor cursor(wxT(«MYCURSOR.CUR»)); — и он работает. Однако файл MYCURSOR.CUR должен быть найден (например, помещен в тот же каталог, что и app.exe ). Другими словами, он игнорирует скомпилированный ресурс, прикрепленный к app.exe . Если файл имени не найден, форма курсора не загружается.

Есть ли способ, который — в Windows — позволит мне загрузить курсор из ресурса на основе номера ресурса?

Я понимаю, что код должен быть написан так, как переносится, на OS операционной системы, основанной на Unix. Есть ли какой-либо рекомендуемый способ преобразования ресурса Windows или файла MYCURSOR.CUR в форму, скомпилированную или прикрепленную к исполняемому исполняемому файлу?

ОБНОВИТЬ

Я нашел на форуме wxWidget форум подсказку в wxCursor от.rc [Win] от upCASE (апрель 2005):

Я пытался использовать его с моим номером, и, похоже, он работает, но я не знаю, почему. Затем я улучшил его следующим образом:

Я считаю, что uggly и, вероятно, не будет правильным способом. В любом случае, можете ли вы это объяснить?

Кроме того, глядя в c:\wxWidgets-2.9.4\src\msw\cursor.cpp , я обнаружил, что конструктор, который принимает строковый аргумент, интерпретирует его как имя файла (по крайней мере, аргумент имеет имя filename ). Код.

предполагает, что LoadCursor() используется так, как это не используется для стека курсора Windows (иначе первый аргумент должен быть NULL). ::LoadCursor называет аргумент как LPCTSTR lpCursorName , и в документе говорится, что

Имя загружаемого ресурса курсора. В качестве альтернативы, этот параметр может состоять из идентификатора ресурса в слове младшего разряда и нуля в слове высокого порядка. Макрос MAKEINTRESOURCE также можно использовать для создания этого значения.

Я также попробовал

но он терпит неудачу, потому что конструктор wxCursor применяет преобразование строки — см. выше filename.t_str() . Можете ли вы прокомментировать это?

РЕШЕНИЕ (плюс некоторое объяснение, с чем я столкнулся. )

Раньше я работал с ресурсами приложений Windows только через IDE, или делал только небольшие вещи напрямую через файл app.rc Когда копайте глубже с помощью ответа VZ и ответа ravenspoint, я могу лучше понять, что они изначально имели в виду, и то, что Microsoft делала в прошлом и позже, и что было источником моей путаницы.

Во-первых, когда вы создаете некоторый ресурс (например, курсор мыши) с помощью Visual Studio IDE, ему автоматически присваивается числовая идентификация (скажем, 103 ). Номер автоматически #define IDC_MYCURSOR 103 в resource.h как #define IDC_MYCURSOR 103 — т.е. задан также макрокоманд. Макро-идентификатор используется, когда информация о курсоре вставлена в app.rc , например:

Поскольку resource.h включен в app.rc , он, вероятно, примерно эквивалентен

и компилятор ресурсов, вероятно, преобразует 103 номер в #103 строку или что — то подобное. Вероятно, из-за этого wxCursor(«#103», wxBITMAP_TYPE_CUR_RESOURCE); работает. Косвенность из 103 через resource.h был источником моего замешательства, пытаясь понять ravenspoint точку :)

Однако использование app.rc без resource.h и строкового идентификатора ресурса, вероятно, было первоначальным намерением дизайнеров. Таким образом,

означает, что компилятор ресурса-скрипта файла создает «mycursor» строковый идентификатор, который может использоваться непосредственно внутри функции LoadCursor() или wxCursor(«mycursor». ); , Это метод, рекомендованный VZ и найденный в отмеченных образцах wx.

Функция LoadCursor

Вот у меня такой вопрос и пишу — WNDCLASSEX wc;
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
//все нормально работает

а если хочу загрузить свой курсор то не получается, в чем ошибка?
wc.hCursor = LoadCursor (hThisInst, «IDC_CURSOR1»);
«IDC_CURSOR1» — или сразу директорию. — или адрес ресурса

в ресурсном файле делаешь курсор, либо грузишь его, и обьявляешь, как IDC_CURSOR1. И кавычек никаких не надо.

А hThisInst — будет являтся первым аргументом функции WinMain, да?

LoadCursor (hThisInst, MAKEINTRESOURCE(IDC_CURSOR1));

LoadCursor

Описание

function LoadCursor(Instance: THandle; CursorName: PChar): HCursor;

Загpужает поименованный pесуpс куpсоpа.

Паpаметpы

  • Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит куpсоp или 0 для пpедопpеделенного куpсоpа.
  • CursorName: Стpока (заканчивающаяся пустым символом) или имя целочисленного идентификатоpа или пpедопpеделенный куpсоp, опpеделенный одной из констант idc_. См. pаздел «Идентификатоpы стандаpных куpсоpов, idc_» в главе 1.

Возвpащаемое значение

В случае успешного завеpшения — идентификатоp куpсоpа; 0 — если куpсоp не найден; не опpеделено, если pесуpс не является pесуpсом куpсоpа.

ВИДЕОКУРС
выпущен 4 ноября!

Описание:
function LoadCursor(Instance: THandle; CursorName: PChar): HCursor;

Загpужает поименованный pесуpс куpсоpа.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит куpсоp или 0 для
пpедопpеделенного куpсоpа.
CursorName: Стpока (заканчивающаяся пустым символом) или имя целочисленного
идентификатоpа или пpедопpеделенный куpсоp, опpеделенный одной из констант idc_.
См. pаздел
«Идентификатоpы стандаpных куpсоpов, idc_» в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения — идентификатоp куpсоpа; 0 — если куpсоp не
найден; не опpеделено, если pесуpс не является pесуpсом куpсоpа.

Что такое код loadcursor

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

Что такое код loadcursor

Above is the code for WinMain.

When I run the app, the cursor is arrow instead of the intended cross.
Why is that? What’s wrong with my code?

Try putting this immediately after InitCommonControls() —

It doesn’t work.
I’m sorry I didn’t give you the big picture.
In fact, the code is the WinMain part of forgers windows api tutorial, page 63.
http://profmsaeed.org/wp-content/uploads/2011/01/forgers-win32-tutorial.pdf

Specifically, I’m trying to change the cursor shape when it passes the MDI client window.

I understand the MDI client window covers the client area of the MDI frame window, so I probably want to look at the code that is related to client window. I went to the WndProc and didn’t find anything related to window registration for the client.

So I’m a bit confused. Where do we register the client window class?

Any input is appreciated.

The first argument to «LoadCursor()» is a handle to the instance of the executable that contains the cursor image, you have that set to NULL when it should be «GetCurrentProcess()». Note: Per MSDN this has been superceded by «LoadImage()» with OCR_ as the second argument: http://msdn.microsoft.com/en-us/library/ms648045(VS.85).aspx

EDIT: Lamblion was indescript with his answer but ultimatly correct, assuming your exe was compiled with that image in it, his suggestion would work.

@Computergeek01:
Thanks for taking time to reply.

I think I have to set the «handle to instance» parameter to null because IDC_CROSS is a system defined cursor shape.

I’ll try to play more with it, but if you have something to point out, please do so.

I think I’ve found the reason why I can’t change the cursor shape when it passes the MDI client window.
The reason is, «mdiclient» is actually a preregistered window class defined by the system. That is the reason why we can’t find window registration in the WM_CREATE case in WndProc.

When we call the function CreatWindowEx() in WinMain, the WM_CREATE message is directly delivered to the window procedure WndProc, without going into the message queue. Then in the WM_CREATE case, we use the system defined mdiclient class to create the mdi client window.

Илон Маск рекомендует:  frameset в HTML

Anyway, thanks to all who took time replying.

Win32 API. Курсоры

Written on 17 Февраля 2007 . Posted in Win32

ОГЛАВЛЕНИЕ

Пользовательские курсоры разрабатываются для использования в специфической прикладной программе и могут быть любого внешнего вида, определяемого разработчиком.

Курсоры могут быть или одноцветными или цветными, и или статическими или «живыми». Тип курсора, используемого в отдельной компьютерной системе, зависит от системного дисплея. Старые дисплеи типа VGA не поддерживают цветные или «живые» указатели, однако новые дисплеи (чьи драйверы изображения используют механизм DIB (ФОРМАТ РАСТРОВОГО ИЗОБРАЖЕНИЯ)) поддерживают их.

Курсоры и иконки похожи и могут использоваться для взаимозаменяемости во многих ситуациях. Единственное различие между ними то, что изображение, заданное как курсор должно быть в формате, который дисплей может поддерживать. Например, курсор должен быть одноцветным для дисплея VGA.

Острие (Hot Spot)

В курсоре, пиксель называемый острием (hot spot), отмечает точное экранное расположение, на которое воздействует событие мыши, типа щелчка ее кнопки. Как правило, острие — фокус курсора. Система устанавливает и распознает эту отметку как позицию курсора. Например, типичные острия — пиксель на кончике курсора имеющего форму стрелки и пиксель в середине курсора имеющего форму креста.

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

Мышь и курсор

Windows отражает движение мыши, перемещая соответственно курсор на экране. Когда курсор перемешается над различными частями окон или в различных окнах, Windows (или прикладная программа) изменяет вид курсора. Например, когда курсор пересекает границу окна, Windows изменяет курсор в двунаправленную стрелку.

Если система не имеет мыши, Windows показывает на экране и перемещает курсор только тогда, когда пользователь выбирает некоторые системные команды, типа тех, которые используются для установки размера или перемещения окна. Чтобы обеспечить пользователя способом отображения и перемещения курсора, когда мышь не доступна, прикладная программа, может использовать функции курсора, чтобы моделировать движение мыши. Получив эту возможность моделирования, пользователь может использовать клавиши со стрелками на клавиатуре, чтобы перемещать курсор.

Создание курсора

Поскольку стандартные курсоры предопределены, нет необходимости в их создании. Чтобы использовать стандартный курсор, прикладная программа извлекает информацию о дескрипторе курсора, используя функцию LoadCursor или LoadImage. Дескриптор курсора (cursor handle) — уникальное значение типа HCURSOR, которое идентифицирует стандартный или пользовательский курсор.

Чтобы создать пользовательский курсор для прикладной программы, Вы должны как обычно использовать программу работы с графикой и включить курсор как ресурс в файле определения ресурса приложения. В период выполнения программы, вызовите функцию LoadCursor, чтобы извлечь информацию о дескрипторе курсора. Ресурсы курсора содержат данные для нескольких различных устройств отображения. Функция LoadCursor автоматически выбирает наиболее соответствующие данные для текущего устройства отображения. Чтобы загрузить курсор непосредственно из .CUR или .ANI файла, используйте функцию LoadCursorFromFile.

Вы можете также создать пользовательский курсор во время выполнения программы, используя функцию CreateIconIndirect, которая создает курсор, основанный на содержании структуры ICONINFO. Функция GetIconInfo заполняет эту структуру координатами острия и информацией относительно взаимодействия битовой маски (bitmask) и цвета.

Прикладные программы должны исполнять пользовательские курсоры как ресурсы и использовать функции LoadCursor, LoadCursorFromFile или LoadImage, а не курсор созданный во время выполнения программы. Использование ресурсов курсора освобождает от зависимости от устройства, упрощает определение местонахождения и дает возможность прикладным программам совместно использовать разработанные курсоры.

Функция CreateIconFromResourceEx дает возможность прикладной программе создать пиктограммы и курсоры, основанные на данных ресурса. CreateIconFromResourceEx создает курсор, основанный на двоичных данных ресурса из других исполняемых (.EXE) файлов или динамически подключаемых библиотек (DLLs). Этому должны предшествовать обращения к функции LookupIconIdFromDirectoryEx, также как и к нескольким функциям ресурса. Функция LookupIconIdFromDirectoryEx идентифицирует наиболее соответствующие данные курсора для текущего устройства отображения. Для получения дополнительной информации относительно функций ресурса, см. статью Ресурсы.

Расположение и вид курсора

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

Вы можете также извлечь информацию о дескрипторе текущего курсора, используя функцию GetCursor, можете установить курсор, используя функцию SetCursor. После того, как вы вызовите SetCursor, вид курсора не изменяется до тех пор, пока или при перемещении мыши курсор явно устанавливается в другой курсор, или выполняется системная команда.

Когда пользователь перемещает мышь, система перерисовывает курсор в новом местоположении. Система автоматически перерисовывает курсор, на курсор связанный с окном, в котором он является указателем.

Вы можете скрыть и восстановить изображение курсора, без изменения рисунка курсора, используя функцию ShowCursor. Эта функция использует внутренний счетчик для определения, когда скрыть или отобразить курсор. Попытка показать курсор увеличивает счетчик; попытка скрыть курсор уменьшает счетчик. Курсор видим только тогда, если этот счетчик больше или равен нулю.

Курсор класса окна

Когда Вы регистрируете класс окна, используя функцию RegisterClass, вы можете назначить ею заданный по умолчанию курсор, известный как курсор класса. После того, как прикладная программа регистрирует класс окна, каждое окно этого класса будет иметь заданный курсор класса (class cursor).

Чтобы отменить курсор класса, обработайте сообщение WM_SETCURSOR. Вы можете также заменить курсор класса, используя функцию SetClassLong. Эта функция изменяет заданные по умолчанию параметры настройки окна для всех окон данного класса. Для получения дополнительной информации, см. раздел Классы окна.

Ограничение свободы движения курсора

Вы можете ограничить курсор прямоугольной областью на экране, используя функцию ClipCursor. Это полезно тогда, когда пользователь должен ответить на достоверное событие внутри области ограниченной прямоугольником. Например, вы можете использовать функцию ClipCursor, чтобы ограничить курсор рамками модального блока диалога, не давая пользователю взаимодействовать с другими окнами, пока диалоговое окно не закрыто.

Функция GetClipCursor извлекает информацию об экранных координатах этой прямоугольной области, в которой курсор временно ограничен. Когда необходимо ограничить курсор, вы можете также использовать эту функцию, чтобы сохранить координаты первоначальной области, в которой курсор может двигаться. Затем, вы можете восстановить курсор в этой первоначальной области, когда в созданном ограничении свободы движения больше нет необходимости.

Разрушение курсора

Когда вам больше не нужен курсор, который вы создали, используя функцию CreateIconIndirect, вы должны его уничтожить. Функция DestroyCursor уничтожает дескриптор курсора и освобождает любую память, которую он использовал. Эту функцию используйте только для курсоров, которые были созданы с помощью CreateIconIndirect; вам нет необходимости уничтожать другие курсоры.

Функция DestroyCursor не имеет никакого влияния на общедоступный курсор; то есть курсор, который был загружен при помощи использования флажка LR_SHARED функции LoadImage. Общедоступный курсор допустим, пока модуль, из которого он был загружен, остается в памяти.

Дублирование курсора

Функция CopyCursor копирует дескриптор курсора. Это дает возможность прикладной программе или коду DLL извлечь информацию о дескрипторе курсора, принадлежащего другому модулю. Затем, если другой модуль освобождается, модуль, который скопировал курсор, будет все еще получать возможность, чтобы использовать рисунок курсора.

Для информации относительно того, как добавлять, удалять, или заменять ресурсы курсора в исполняемых файлах, см. раздел Ресурсы.

Использование курсоров

Создание курсора

Следующий пример создает два дескриптора курсора: один для стандартного курсора в форме песочных часов и второй для пользовательского курсора, включенного как ресурс в файле определения ресурса прикладной программы.

Вы должны осуществлять пользовательские курсоры как ресурсы. Лучше всего создавать курсоры во время выполнения программы, используя функцию LoadCursor, LoadCursorFromFile или LoadImage, чтобы избежать зависимости от устройства, упростить определение местонахождения и дать возможность приложениям совместно использовать разработку курсора.

Следующий пример использует функцию CreateCursor, чтобы создать пользовательский курсор во время выполнения программы. Пример включен здесь, чтобы проиллюстрировать, как система интерпретирует битовые маски курсора.

Чтобы создать курсор, CreateCursor применяет следующую таблицу истинности для битовых масок AND и XOR.

За более полной информацией обратись к статье Битовые маски.

Перед закрытием, вы должны использовать функцию DestroyCursor, чтобы уничтожить любые курсоры, которые вы создали при помощи CreateCursor. Но нет необходимости уничтожать курсоры, созданные другими функциями.

Отображение курсора

Windows автоматически отображает курсор класса (курсор, связанный с окном, в котором он указывает). Вы можете назначать курсор класса при регистрации класса окна. Следующий пример иллюстрирует это, назначая дескриптор курсора в элементе hCursor структуры WNDCLASS, идентифицированной параметром wc.

Когда класс окна зарегистрирован, курсор, идентифицированный как 230 в файле определения ресурса прикладной программы, будет задан по умолчанию как курсор для всех окон, основанных на классе.

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

Вы можете устанавливать различные курсоры для различных условий при обработке WM_SETCURSOR. Например, следующий пример показывает, как всякий раз отображать курсор hCurs3, когда он перемещается поверх пиктограммы свернутой прикладной программы.

Когда окно не свернуто, Windows отображает курсор класса.

Вы можете заменить курсор класса, используя функцию SetClassLong. Эта функция изменяет заданные по умолчанию параметры настройки окна для всех окон данного класса. В следующем примере заменяется существующий курсор класса на курсор hCurs2.

За более подробной информацией, обратитесь к статьям Классы окна и Информация вводимая от Мыши.

Ограничение свободы перемещения курсора

В примере ниже ограничивается перемещение курсора в окне прикладной программы, а затем курсор восстанавливается в его предыдущем окне. В примере используется функция GetClipCursor, чтобы записать область, в которой курсор может передвигаться и функция ClipCursor для ограничения и восстановления курсора.

Поскольку в системе имеется только один курсор, доступный одновременно, прикладная программа, которая ограничила перемещение курсора, должна восстановить курсор перед отказом от управления им в другом окне.

Использование функций курсора для создания «мышеловки»

В примере ниже используются функции SetCursorPos, GetCursorPos, CreateCursor, LoadCursor и SetCursor для создания простой «мышеловки». В нем используются также функции курсора и таймера для отслеживания позиции курсора каждые 10 секунд. Если позиция курсора не изменялась за последние 10 секунд, а главное окно прикладной программы свернуто, прикладная программа изменяет курсор и перемещает его в пиктограмму «мышеловки».

Илон Маск рекомендует:  Что такое код hw_api >srcanchors

Пример для простой «мышеловки» включается в Пиктограммы (Icons). В нем используются функции LoadCursor и LoadIcon вместо более аппаратно-зависимых функций CreateCursor и CreateIcon.

Использование клавиатуры для перемещения курсора

Поскольку Windows не требует мыши, прикладная программа должна получить возможность, чтобы моделировать действия мыши с клавиатуры. Следующий пример показывает, как достичь этого, используя функции GetCursorPos и SetCursorPos и обрабатывать ввод информации от клавиш курсора.

Справочник по Курсору

Следующие функции и сообщения связаны с курсорами.

Функции курсора

Ниже следуют функции, используемые с курсорами

Функция ClipCursor

Функция ClipCursor ограничивает перемещение курсора в прямоугольной области на экране. Если последующая позиция курсора (установленная функцией SetCursorPos или мышью) лежит снаружи прямоугольника, Windows автоматически корректирует позицию, чтобы сохранить курсор внутри прямоугольной области.

Параметры
lpRect
Указывает на структуру RECT, которая содержит экранные координаты левого верхнего и нижнего правого углов прямоугольника ограничения. Если этот параметр значение ПУСТО (NULL), курсор свободен для передвижения в любое место экрана.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Замечания
Курсор — общедоступный ресурс. Если прикладная программа ограничивает курсор, она должна освободить курсор, используя ClipCursor перед отказом от управления им в другой прикладной программе.
Вызываемый процесс должен иметь доступ WINSTA_WRITEATTRIBUTES к месту окна.

Смотри также
GetClipCursor, GetCursorPos, RECT, SetCursorPos

Размещение и совместимость ClipCursor

Функция CopyCursor

Функция CopyCursor копирует курсор.

Параметры
pcur
Идентификатор копируемого курсора.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение — дескриптор дубликата курсора.
Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Функция CopyCursor дает возможность прикладной программе или динамически подключаемой библиотеке (DLL) получить дескриптор образца курсора, принадлежащий другому модулю. И даже тогда, когда другой модуль освобождается, прикладная программа все еще способна использовать этот образец курсора.

Смотри также
CopyIcon, GetCursor, SetCursor, ShowCursor

Размещение и совместимость CopyCursor

Функция CreateCursor

Функция CreateCursor создает курсор, имеющий заданный размер, битовые шаблоны и острие.

Параметры
hInst
Идентифицирует текущий образец прикладной программы, создающей курсор.
xHotSpot
Определяет горизонтальную позицию острия курсора.
yHotSpot
Определяет вертикальную позицию острия курсора.
nWidth
Устанавливает ширину курсора в пискелях.
nHeight
Устанавливает высоту курсора в пискелях.
pvANDplane
Указывает на массив байтов, который содержит битовые значения битовой маски AND для курсора, как в аппаратно-зависимом одноцветном точечном рисунке.
pvXORplane
Указывает на массив байтов, который содержит битовые значения битовой маски XOR для курсора, как в аппаратно-зависимом одноцветном точечном рисунке.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение идентифицирует курсор.
Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получить расширенные данные об ошибках, вызовите GetLastError.

Замечания
Параметры nWidth и nHeight должны установить ширину и высоту, которые поддерживаются текущим драйвером дисплея, потому что система не может создать курсоры других размеров. Чтобы определить ширину и высоту, поддерживаемую драйвером дисплея, используйте функцию GetSystemMetrics, установив значение SM_CXCURSOR или SM_CYCURSOR.
Перед закрытием, приложение должно вызвать функцию DestroyCursor, чтобы освободить любые ресурсы системы, связанные с курсором.

Смотри также
CreateIcon, DestroyCursor, GetModuleHandle, GetSystemMetrics, SetCursor

Размещение и совместимость CreateCursor

Функция DestroyCursor

Функция DestroyCursor уничтожает курсор, созданный функцией CreateCursor и освобождает любую память занятую курсором. Не используйте эту функцию, чтобы уничтожить курсор, который не был создан функцией CreateCursor.

Параметры
hCursor
Идентифицирует курсор, который будет разрушен. Курсор не должен быть в использовании.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Смотри также
CreateCursor

Размещение и совместимость DestroyCursor.

Функция GetClipCursor

Функция GetClipCursor извлекает информацию об экранных координатах прямоугольной области, в которой ограничен курсор.

Параметры
lpRect
Указывает на структуру RECT, которая принимает экранные координаты прямоугольника ограничения. Структура принимает габариты экрана, если курсор не ограничен в прямоугольнике.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Замечания
Курсор — общедоступный ресурс. Если прикладная программа ограничивает курсор при помощи функции ClipCursor, она позже должна освободить курсор, используя ClipCursor перед отказом от управления им в другой прикладной программе.
Процесс вызова должен иметь указатель WINSTA_READATTRIBUTES на местоположение окна.

Смотри также
ClipCursor, GetCursorPos, RECT

Размещение и совместимость GetClipCursor

Функция GetCursor

Функция GetCursor извлекает информацию о дескрипторе текущего курсора.

Параметры
У этой функции нет параметров.

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение — дескриптор текущего курсора.
Если не имеется никакого курсора, возвращаемое значение ПУСТО (NULL).

Смотри также
SetCursor

Размещение и совместимость GetCursor

Функция GetCursorPos

Функция GetCursorPos извлекает информацию о позиции курсора, в экранных координатах.

Параметры
lpPoint
Указывает на структуру POINT, которая принимает экранные координаты курсора.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Замечания
Позиция курсора всегда дается в экранных координатах и не находится под влиянием режима отображения окна, которое содержит курсор.
Процесс вызова должен иметь указатель WINSTA_READATTRIBUTES на местоположение окна.

Смотри также
ClipCursor, POINT, SetCursor, SetCursorPos, ShowCursor

Размещение и совместимость GetCursorPos

Функция LoadCursor

Функция LoadCursor загружает заданный ресурс курсора из (.EXE) файла выполняемой программы, связанной с экземпляром прикладной программы.

Параметры
hInstance
Идентифицирует экземпляр модуля, исполняемый файл которого содержит курсор, который будет загружен.
lpCursorName
Указывает на строку с символом нуля в конце, содержащую имя ресурса курсора, который будет загружен. Или же, этот параметр может состоять из идентификатора ресурса, в младшем слове и нуля в старшем слове. Может также использоваться макрокоманда MAKEINTRESOURCE, чтобы создать это значение.
Чтобы использовать предопределенный курсор Win32, прикладная программа должна установить параметр hInstance в значение ПУСТО (NULL), а параметр lpCursorName в одно из следующих значений:

  • IDC_APPSTARTING — Стандартная стрелка и маленькие песочные часы
  • IDC_ARROW — Стандартная стрелка
  • IDC_CROSS — Перекрестие
  • IDC_IBEAM — I-прямая вертикальная линия для текста
  • IDC_ICON — Только для Windows NT: Пустая иконка
  • IDC_NO — Перечеркнутый круг
  • IDC_SIZE — Только для Windows NT: Четырех направленная стрелка
  • IDC_SIZEALL — Подобно IDC_SIZE
  • IDC_SIZENESW — Двунаправленная стрелка, указывающая северо-восток и юго-запад
  • IDC_SIZENS — Двунаправленная стрелка, указывающая север и юг
  • IDC_SIZENWSE — Двунаправленная стрелка, указывающая северо-запад и юго-восток
  • IDC_SIZEWE — Двунаправленная стрелка, указывающая запад и восток
  • IDC_UPARROW — Вертикальная стрелка
  • IDC_WAIT — Песочные часы

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение — дескриптор недавно загруженного курсора.
Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите GetLastError

Замечания
LoadCursor загружает только ресурс курсора, если он не был загружен; иначе, функция извлекает дескриптор существующего ресурса. Эта функция возвращает допустимое значение дескриптора курсора только тогда, если параметр lpCursorName указывает на ресурс курсора. Если lpCursorName указывает на какой-либо тип ресурса отличающегося от курсора (например, пиктограммы), возвращаемое значение не ПУСТО (NULL), даже притом, что это не правильный дескриптор курсора.
Функция LoadCursor ищет ресурс курсора наиболее соответствующий курсору для текущего устройства отображения. Ресурс курсора может быть цветной или одноцветный точечный рисунок.

Смотри также
LoadImage, MAKEINTRESOURCE, SetCursor, SetCursorPos, ShowCursor

Размещение и совместимость LoadCursor

Функция LoadCursorFromFile

Функция LoadCursorFromFile создает курсор, основанный на данных, содержащихся в файле. Файл определен его именем или идентификатором курсора системы. Функция возвращает значение дескриптора недавно созданного курсора. Файлы, содержащие данные курсора могут быть или в формате курсора (.CUR) или «живого указателя» (.ANI).

Параметры
lpFileName
Указывает источник данных файла, которые нужно использовать, чтобы создать курсор. Данные в файле должны быть или в формате .ANI или .CUR.
Если старшее слово LoadCursorFromFile отлично от нуля, это — указатель на строку, которая является полностью составным именем файла, содержащего данные курсора.
Если старшее слово lpszFileName нулевое, младшее слово является идентификатором курсора системы. Затем функция ищет входную точку [Cursors] в файле WIN.INI для файла, связанного с именем этого курсора системы. Имеется список имен курсоров системы и идентификаторов:

Например, если WIN.INI файл содержит следующее:

что заставляет функцию LoadCursorFromFile получить данные курсора из файла ARROW.ANI. Если файл WIN.INI не содержит входной точки для заданного курсора системы, функция не выполняет задачу и возвращает значение ПУСТО (NULL).

Возвращаемые значения
Если функция завершается успешно, возвращаемое значение — дескриптор нового курсора.
Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите функцию GetLastError.
Функция GetLastError может возвратить следующее значение:

  • ERROR_FILE_NOT_FOUND — Невозможно найти заданный файл

Смотри также
LoadCursor, SetCursor, SetSystemCursor

Размещение и совместимость LoadCursorFromFile

Функция SetCursor

Функция SetCursor устанавливает форму курсора.

Параметры
hCursor
Идентифицирует курсор. Курсор, должен быть создан функцией CreateCursor или загружен функцией LoadCursor или LoadImage. Если этот параметр имеет значение ПУСТО (NULL), курсор удаляется с экрана.
Windows 95: ширина и высота курсора должны быть значениями, возвращенными функцией GetSystemMetrics для SM_CXCURSOR и SM_CYCURSOR. Кроме того, битовая глубина резко изображаемого пространства курсора должна соответствовать битовой глубине резко изображаемого пространства дисплея, или курсор должен быть одноцветен.

Возвращаемые значения
Возвращаемое значение — дескриптор предыдущего курсора, если тот имелся.
Если не было никакого предыдущего курсора, возвращаемое значение ПУСТО (NULL).

Замечания
Курсор устанавливается только тогда, если новый курсор отличается от предыдущего курсора; иначе, функция немедленно возвращает значение.
Курсор — общедоступный ресурс. Окно должно устанавливать форму курсора только тогда, когда курсор находится в его рабочей области или когда окно захватило ввод мыши. В системах без мыши, окно должно восстановить предыдущий курсор до того, как курсор оставит рабочую область или до того, как система предоставит управление другому окну.
Если ваша прикладная программа должна установить курсор, в то время когда оно находится в окне, удостоверитесь, что курсор класса в классе определяемого окна установлен в значение ПУСТО (NULL). Если курсор класса не ПУСТО (NULL), система восстанавливает курсор класса, каждый раз, когда перемещается мышь.
Курсор не показывается на экране, если внутренний счетчик отображения курсора — меньше чем нуль. Это происходит тогда, если прикладная программа использует функцию ShowCursor для сокрытия курсора большее количество времени, чем для показа курсора.

Илон Маск рекомендует:  Что нового в borland jbuilder 7

Смотри также
CreateCursor, GetCursor, GetSystemMetrics, LoadCursor, LoadImage, SetCursorPos, ShowCursor

Размещение и совместимость SetCursor

Функция SetCursorPos

Функция SetCursorPos перемещает курсор в заданные экранные координаты. Если новые координаты не внутри экранного прямоугольника, установленного самой последней функцией ClipCursor, Windows автоматически корректирует координаты так, чтобы курсор остался внутри прямоугольника.

Параметры
X
Устанавливает новую x-координату, в экранных координатах, курсора.
Y
Устанавливает новую y-координату, в экранных координатах, курсора.

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Замечания
Курсор — общедоступный ресурс. Окно должно перемещать курсор, только тогда, когда курсор находится в его рабочей области.
Процесс вызова должен иметь указатель WINSTA_WRITEATTRIBUTES местоположение окна.

Смотри также
ClipCursor, GetCursorPos, SetCaretPos, SetCursor, ShowCursor

Размещение и совместимость SetCursorPos

Функция SetSystemCursor

Функция SetSystemCursor заменяет содержимое системного курсора, заданного идентификатором id содержимым курсора, заданного hcur, и затем уничтожает hcur. Эта функция позволяет прикладной программе настраивать курсоры системы.

Параметры
hcur
Дескриптор курсора. Функция заменяет содержимое курсора системы, заданного идентификатором id, содержимым курсора, обработанного при помощи hcur. Затем функция уничтожает hcur, вызывая DestroyCursor (hCursor).
id
Идентификатор курсора системы. Функция заменяет содержимое этого курсора системы содержимым курсора, обработанного при помощи hcur.
Ниже следует список идентификаторов курсоров системы:

  • OCR_NORMAL — Обычный курсор-стрелка
  • OCR_IBEAM — I-образный курсор
  • OCR_WAIT — Курсор в виде больших песочных часов
  • OCR_CROSS — Курсор в виде креста
  • OCR_UP — Курсор стрелка вверх
  • OCR_SIZE — Курсор размера (четырех направленная стрелка)
  • OCR_ICON — Курсор в виде пиктограммы
  • OCR_SIZENWSE — Курсор изменения размера (двунаправленная стрелка СЗ — ЮВ)
  • OCR_SIZENESW — Курсор изменения размера (двунаправленная стрелка СВ — ЮЗ)
  • OCR_SIZEWE — Курсор изменения размера по горизонтали
  • OCR_SIZENS — Курсор изменения размера по вертикали
  • OCR_SIZEALL — Курсор изменения размера по вертикали и горизонтали
  • OCR_SIZENO — Международный символ отсутствия курсора
  • OCR_APPSTARTING — Курсор в виде стрелки с маленькими песочными часами

Возвращаемые значения
Если функция завершилась успешно, возвращается значение отличное от нуля.
Если функция потерпела неудачу, возвращаемое значение — ноль. Чтобы получить расширенные данные об ошибках, обратитесь к функции GetLastError.

Смотри также
DestroyCursor, LoadCursor, LoadCursorFromFile, SetCursor

Размещение и совместимость SetSystemCursor

Функция ShowCursor

Функция ShowCursor отображает или скрывает курсор.

Параметры
bShow
Определяет, должен ли внутренний счетчик отображения быть увеличен или уменьшен. Если bShow — ИСТИНА (TRUE), счет дисплея увеличивается на единицу. Если bShow — ЛОЖЬ(FALSE), счет дисплея уменьшается на единицу.

Возвращаемые значения
Возвращаемое значение устанавливает новый счетчик отображения.

Замечания
Эта функция устанавливает внутренний счетчик отображения, который определяет, должен ли курсор отображаться. Курсор отображается только тогда, если счетчик отображения больше чем 0 или равен 0. Если инсталлирована мышь, начальное значение счетчика отображения — 0. Если никакая мышь не установлена, начальное значение счетчика отображения -(минус)1.

Смотри также
ClipCursor, GetCursorPos, SetCursor, SetCursorPos

Размещение и совместимость ShowCursor

Сообщения курсора

Следующее сообщение используется курсорами

Сообщение WM_SETCURSOR

Сообщение WM_SETCURSOR посылается окну, если мышь вынуждает курсор двигаться внутри окна, а ввод данных от мыши не перехватывается.

Параметры
hwnd
Значение wParam. Идентифицирует окно, которое содержит курсор.
nHittest
Значение младшего слова lParam. Определяет код местоположения курсора.
wMouseMsg
Значение старшего слова lParam. Определяет идентификатор сообщения мыши.

Действие по умолчанию
Функция DefWindowProc, перед обработкой, передает сообщение WM_SETCURSOR родительскому окну. Если родительское окно возвращает ИСТИНА (TRUE), дальнейшая обработка останавливается. Передача сообщения родительскому окну дает ему контроль над установкой курсора в дочернем окне. Функция DefWindowProc также использует это сообщение для того, чтобы установить курсор в виде стрелке, если он не в рабочей области, или в виде зарегистрированного курсора класса, если он находится в рабочей области. Если младшее слово параметра lParam — HTERROR, а старшее слово lParam определяет, что одна из кнопок мыши нажата, DefWindowProc вызывает функцию MessageBeep.

Замечания
Старшее слово lParam имеет значение ноль тогда, когда окно вводит режим меню.

Смотри также
DefWindowProc, MessageBeep

Размещение и совместимость WM_SETCURSOR

wxWidgets в Windows: как создать wxCursor из номера ресурса приложения?

Я переписываю приложение, используя wxWidges (native C++). У меня есть несколько пользовательских курсоров мыши, созданных с помощью редактора ресурсов Visual Studio. Редактор ресурсов создает для каждого файла файл MYCURSOR.CUR с растровым изображением и другой информацией, добавляет одну запись в файл app.rc например:

. и добавляет одну строку к сгенерированному resource.h h:

Когда приложение компилируется, скомпилированные ресурсы берут двоичную форму, которая становится неотъемлемой частью app.exe . Когда структура wxWidgets не используется, можно вызвать:

где hInstance — это дескриптор приложения, у которого есть исполняемый файл с ресурсом курсора (в скомпилированной двоичной форме, здесь, в app.exe ).

С wxWidgets я могу создать экземпляр класса wxCursor и передать ему имя файла с помощью курсорного курсора wxCursor cursor(wxT(«MYCURSOR.CUR»)); — и он работает. Однако файл MYCURSOR.CUR должен быть найден (например, помещен в тот же каталог, что и app.exe ). Другими словами, он игнорирует скомпилированный ресурс, прикрепленный к app.exe . Если файл имени не найден, форма курсора не загружается.

Есть ли способ, который — в Windows — позволит мне загрузить курсор из ресурса на основе номера ресурса?

Я понимаю, что код должен быть написан так, как переносится, на OS операционной системы, основанной на Unix. Есть ли какой-либо рекомендуемый способ преобразования ресурса Windows или файла MYCURSOR.CUR в форму, скомпилированную или прикрепленную к исполняемому исполняемому файлу?

ОБНОВИТЬ

Я нашел на форуме wxWidget форум подсказку в wxCursor от.rc [Win] от upCASE (апрель 2005):

Я пытался использовать его с моим номером, и, похоже, он работает, но я не знаю, почему. Затем я улучшил его следующим образом:

Я считаю, что uggly и, вероятно, не будет правильным способом. В любом случае, можете ли вы это объяснить?

Кроме того, глядя в c:\wxWidgets-2.9.4\src\msw\cursor.cpp , я обнаружил, что конструктор, который принимает строковый аргумент, интерпретирует его как имя файла (по крайней мере, аргумент имеет имя filename ). Код.

предполагает, что LoadCursor() используется так, как это не используется для стека курсора Windows (иначе первый аргумент должен быть NULL). ::LoadCursor называет аргумент как LPCTSTR lpCursorName , и в документе говорится, что

Имя загружаемого ресурса курсора. В качестве альтернативы, этот параметр может состоять из идентификатора ресурса в слове младшего разряда и нуля в слове высокого порядка. Макрос MAKEINTRESOURCE также можно использовать для создания этого значения.

Я также попробовал

но он терпит неудачу, потому что конструктор wxCursor применяет преобразование строки — см. выше filename.t_str() . Можете ли вы прокомментировать это?

РЕШЕНИЕ (плюс некоторое объяснение, с чем я столкнулся. )

Раньше я работал с ресурсами приложений Windows только через IDE, или делал только небольшие вещи напрямую через файл app.rc Когда копайте глубже с помощью ответа VZ и ответа ravenspoint, я могу лучше понять, что они изначально имели в виду, и то, что Microsoft делала в прошлом и позже, и что было источником моей путаницы.

Во-первых, когда вы создаете некоторый ресурс (например, курсор мыши) с помощью Visual Studio IDE, ему автоматически присваивается числовая идентификация (скажем, 103 ). Номер автоматически #define IDC_MYCURSOR 103 в resource.h как #define IDC_MYCURSOR 103 — т.е. задан также макрокоманд. Макро-идентификатор используется, когда информация о курсоре вставлена в app.rc , например:

Поскольку resource.h включен в app.rc , он, вероятно, примерно эквивалентен

и компилятор ресурсов, вероятно, преобразует 103 номер в #103 строку или что — то подобное. Вероятно, из-за этого wxCursor(«#103», wxBITMAP_TYPE_CUR_RESOURCE); работает. Косвенность из 103 через resource.h был источником моего замешательства, пытаясь понять ravenspoint точку :)

Однако использование app.rc без resource.h и строкового идентификатора ресурса, вероятно, было первоначальным намерением дизайнеров. Таким образом,

означает, что компилятор ресурса-скрипта файла создает «mycursor» строковый идентификатор, который может использоваться непосредственно внутри функции LoadCursor() или wxCursor(«mycursor». ); , Это метод, рекомендованный VZ и найденный в отмеченных образцах wx.

Загрузка изображения или курсора из RES-файла

Загрузка изображений и курсоров из RES-файлов

Изображения и курсоры могут храниться в файлах ресурсов (RES) и прилинковываться (связаваться) к EXE-файлу вашего приложения. RES-файлы могут создаваться с помощью Delphi утилит Image Editor и Borland Resource Workshop, входящие в поставку Delphi RAD Pack. Изображения и курсоры, хранимые в RES-файлах (после упаковки их в EXE или DLL) могут быть извлечены с помощью API функций LoadBitmap и LoadCursor соответственно.

Функция API LoadBitmap определена следующим образом:

Первый параметр должен содержать дескриптор модуля (EXE или DLL), содержащего файл RES, из которого вы хотите получить ресурс. Delphi хранит дескриптор запущенного EXE-файла в глобальной переменной с именем Hinstance. В приведенном ниже примере мы предполагаем, что модуль, из которого мы пытаемся загрузить изображение, — ваше приложение. Тем не менее, модуль мог бы быть другим EXE- или DLL-файлом. Следующий пример загружает изображение с именем BITMAP_1 из RES-файла, прилинкованного к EXE-файлу приложения:

Имеется один недостаток использования API вызова LoadBitmap: LoadBitmap все же является API вызовом Windows 3.0, и грузит изображение только как DDB (Device Dependent Bitmaps). Это может вызвать проблемы с цветовой палитрой при загрузке DIB (Device Independent Bitmaps) из RES-файла. Приведенный ниже код может использоваться для извлечения DIB-ов из RES-файлов. Данный код загружает изображение как общий ресурс, передает его в поток, после чего делает Delphi вызов LoadFromStream, реализующий палитру автоматически.

Функция API LoadCursor определена следующим образом:

Первый параметр Instance должен содержать дескриптор модуля, содержащего файл RES. Как и пример, приведенный выше, данный пример предполагает, что модуль, из которого мы пытаемся загрузить курсор, — ваше приложение. Второй параметр — имя курсора. В секции interface сделайте следующее объявление:

Затем добавьте следующие две строчки к обработчику события формы OnCreate:

или же вы можете изменить один из стандартных курсоров Delphi как показано ниже (константы Cursor описаны в электронной справке в статье Cursors Property):

Примечание: в нормальной ситуации необходимо удалить любые ресурсы курсоров с помощью DeleteCursor, тем не менее, в Delphi в этом нет необходимости, поскольку Delphi сама удаляет все курсоры из массива Cursors.

Copyright © 2004-2020 «Delphi Sources». Delphi World FAQ

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL