Apagando usando a caneta
Se você optar por implementar o apagamento em seu aplicativo que não seja usando o objeto InkOverlay , poderá fazer isso usando um dos dois métodos a seguir.
Usando a dica da caneta
A ponta da caneta tablet geralmente é usada para manuscrito e desenho; no entanto, a dica também pode ser usada para apagar a tinta. Para fazer isso, o aplicativo deve ter um modo de apagamento que os usuários possam empregar. Nesse modo, use o teste de clique para determinar qual tinta o cursor está se movendo. Você pode definir o modo de apagamento para excluir apenas a tinta que o cursor passa sobre ou traços inteiros que cruzam o caminho do cursor, dependendo do design ou considerações funcionais.
Para obter um exemplo de como usar um modo de apagamento para apagar a tinta, consulte o Exemplo de Apagamento de Tinta.
Usando a parte superior da caneta
Para implementar o apagamento com a parte superior da caneta tablet, seu aplicativo deve procurar uma alteração no cursor. Para procurar o cursor invertido, ouça o evento CursorInRange para determinar quando o cursor está dentro do contexto do aplicativo. Quando o cursor estiver no intervalo, procure a propriedade Inverted no objeto Cursor . Se a propriedade Inverted for verdadeira, execute o teste de clique para determinar qual tinta o cursor está se movendo. Apago a tinta ou os traços que cruzam o caminho do cursor, dependendo do design ou das considerações funcionais.
Para obter um exemplo de como usar a parte superior da caneta para apagar a tinta, consulte o Exemplo de Apagamento de Tinta.
Determinar se o apagamento com a parte superior da caneta está habilitado
Os usuários podem usar a parte superior da caneta para apagar a tinta em aplicativos projetados para Tablet PC, se seu hardware específico permitir isso. Essa funcionalidade é acessada por uma caixa marcar na caixa grupo Botões de caneta na guia Opções de Caneta da caixa de diálogo Painel de controle Configurações de Tablet e Caneta. Para detectar se o usuário habilitou o apagamento para a parte superior da caneta, marcar a seguinte subchave do Registro:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\WISP\PEN\SysEventParameters
A EraseEnable
entrada dessa subchave é do tipo REG_DWORD. O valor dessa entrada é 1 para habilitado ou 0 para desabilitado. Outros valores são reservados para uso futuro.
Se o aplicativo permitir que a parte superior da caneta seja usada para apagar, você deverá marcar e armazenar em cache o valor da entrada EraseEnable quando:
- Seu aplicativo é iniciado.
- Sempre que seu aplicativo recebe o foco depois de perder o foco.
Use esse valor armazenado em cache para modificar o comportamento do aplicativo adequadamente.
O exemplo de C# a seguir define um GetEraseEnabled
método que verifica o valor da EraseEnable
entrada da SysEventParameters
subchave. O GetEraseEnabled
método retornará TRUE se o valor da entrada for 1; retornará FALSE se o valor da entrada for 0; ou gerará uma exceção InvalidOperationException se o valor da entrada for diferente de 1 ou 0. O GetEraseEnabled
método retornará o valor esperado de TRUE se a subchave ou a entrada não estiver presente.
private bool GetEraseEnabled()
{
// 0 is disabled, 1 is enabled. The default is enabled
const int Enabled = 1;
const int Disabled = 0;
const int DefaultValue = Enabled;
// Constants for the registry subkey and the entry
const string Subkey =
@"SOFTWARE\Microsoft\WISP\PEN\SysEventParameters";
const string KeyEntry = "EraseEnable";
// Open the registry subkey.
Microsoft.Win32.RegistryKey regKey =
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Subkey);
// Retrieve the value of the EraseEnable subkey entry. If either
// the subkey or the entry does not exist, use the default value.
object keyValue = (null == regKey) ? DefaultValue :
regKey.GetValue(KeyEntry,DefaultValue);
switch((int)keyValue)
{
case Enabled:
// Return true if erasing on pen inversion is enabled.
return true;
case Disabled:
// Return false if erasing on pen inversion is disabled.
return false;
default:
// Otherwise, throw an exception. Do not assume this is
// a Boolean value. Enabled and Disabled are the values
// defined for this entry at this time. Other values are
// reserved for future use.
throw new InvalidOperationException(
"Unexpected registry subkey value.");
}
}