Как вы получаете информацию о давлении стилуса на окнах? - PullRequest
6 голосов
/ 03 января 2009

Кто-нибудь знает о здравом способе получения информации о давлении планшета / стилуса в Windows?

Можно отличить стилус от мыши с помощью :: GetMessageExtraInfo, но вы не можете получить больше информации, кроме этого. Я также обнаружил, что WinTab API находится в отдаленном уголке сайта Wacom, но, насколько я могу судить, это не часть окон, и он имеет совершенно отличную систему событий / сообщений от очереди сообщений.

Учитывая все, что я хочу, это самая основная информация о давлении, безусловно, есть стандартный Win32 / COM API, кто-нибудь знает, что это может быть?

Ответы [ 3 ]

2 голосов
/ 20 июля 2009

UPDATE:
Прошло уже много лет с тех пор, как я первоначально предоставил этот ответ, но wintab стал стандартом де-факто, и Ntrig более или менее свернулся, в конечном счете создавая оболочку, позволяющую получать доступ к API wintab через этот цифровой преобразователь. 1005 * (http://www.tabletpcbuzz.com/showthread.php?37547-N-trig-Posts-WinTAB-Support-Driver)

Это довольно поздний ответ, но недавно мы с женой приобрели планшетный компьютер Dell XT, который, как оказалось, на самом деле использует NTrig, набор интерфейсов, использующих Ink, принятый новый Windows API, поставляемый с Windows XP. Издание для планшета, затем SP 2 и все последующие версии.

Многие планшеты Wacom и другие используют Wintab API, который в настоящее время не открыт и не разрешен к использованию. Из того, что я слышал, люди, которые поддерживают это, очень довольны иском.

Так что это зависит от того, какой тип планшета вы используете, и драйверов, которые вы установили для него. По моему предвзятому мнению, вы должны работать с Ink, поскольку она обеспечивает (или, по крайней мере, через NTrig и Windows 7 БУДЕТ) возможность мультитач и, вероятно, станет новым стандартом для интерфейсов планшета. Но на данный момент устройства NTrig не транслируют информацию о давлении и угле в обычные приложения на основе Wintab, такие как Photoshop или Corel Painter. Приложениям, как правило, требуется как минимум некоторая поддержка API планшета для Microsoft для правильной работы.

2 голосов
/ 08 мая 2017

Текущий способ сделать это - обработать сообщения WM_POINTERnnn. Обратите внимание, что это для Win 8 и более поздних версий.

Обратите внимание, что вы получите эти сообщения для сенсорного И пера, поэтому вам нужно будет знать pointerType для проверки на перо. WPARAM, полученный WNDPROC для сообщений WM_POINTERnnnnn, таких как WM_POINTERUPDATE и других сообщений, содержит идентификатор указателя, который вам понадобится для запроса дополнительной информации. Опытным путем я обнаружил, что WM_POINTERUPDATE приводит к информации, которая содержит данные о давлении, тогда как, если указатели указывают вниз / вверх, информация о давлении отсутствует.

const WORD wid = GET_POINTERID_WPARAM(wParam);
POINTER_INFO piTemp = {NULL};
GetPointerInfo(wid, &piTemp);
if (piTemp.pointerType == PT_PEN
{
    UINT32 entries = 0;
    UINT32 pointers = 0;

    GetPointerFramePenInfoHistory(wid, &entries, &pointers, NULL); // how many
    // TODO, allocate space needed for the info, process the data in a loop to retrieve it, test pointerInfo.pointerFlags for down/up/update.

}

Как только вы узнаете, что имеете дело с ручкой, вы можете получить информацию о давлении из структуры POINTER_PEN_INFO.

Это похоже на обработку касания, хотя для касания вам понадобятся распознавание жестов и инерция. Существует пример Microsoft, иллюстрирующий использование этих функций.

Это часть разговора о сборке: https://channel9.msdn.com/Events/Build/2013/4-022

2 голосов
/ 09 апреля 2009

Вам необходимо использовать Pen / Ink API для планшетного ПК. COM-версия API находится в InkObj.dll. Вот отправная точка для документации: http://msdn.microsoft.com/en-us/library/ms700664.aspx

Если я правильно помню, InkObj.dll доступен на Windows XP с пакетом обновления 2 (SP2) и на всех последующих клиентских ОС Windows, независимо от того, является ли компьютер планшетным ПК.

...