Working with Pens
9/9/2008
Em Windows Embedded CE, um caneta é um objeto gráfico para desenhar linhas. Desenho aplicativos usam canetas para desenhar linhas à mão livre e linhas retas. Aplicativos design Computer-aided (CAD) usam canetas para desenhar linhas visíveis, seção Linhas, centralizar linhas e assim por diante. Processamento Word e área de trabalho editoração aplicativos usam canetas para desenhar bordas e regras. Aplicativos de planilha usam canetas para designar as tendências em gráficos e para estrutura de tópicos barra gráficos e gráficos de pizza.
Windows Embedded CE stock canetas incluem o BLACK_PEN e o WHITE_PEN, que desenhar um sólido, 1 - pixel - linha grande em seu respectivo cor e o NULL_PEN, que não desenhar. Você obtém a stock pens com o GetStockObject função.
Você chamar o CreatePen Ou CreatePenIndirect função para criar um personalizado caneta com um exclusivo cor, largura ou estilo caneta.
A seguinte tabela mostra os estilos caneta com suporte por Windows Embedded CE.
Estilo da caneta | Descrição |
---|---|
PS_SOLID |
Desenha uma linha sólida. |
PS_DASH |
Desenha um linha tracejada. |
PS_NULL |
Não desenhar uma linha. |
Windows Embedded CE oferece suporte a canetas ampla e tracejado pens, mas não canetas suporte pontilhada, dentro de canetas quadro, canetas geométricas, caneta endcap estilos ou canetas que estão ambos ampla e tracejado.
Você pode criar uma caneta com um exclusivo cor armazenando o valor RGB que especifica a cor que você desejar em um COLORREF valor e passar esse valor para o CreatePen Ou CreatePenIndirect função. No caso de CreatePenIndirect, o COLORREF valor é incorporado a LOGPEN estrutura, que é usada pelo CreatePenIndirect.
Observação
A caneta ampla requer computação GDI significativa.Para melhorar o desempenho de um aplicativo de texto manuscrito, use um padrão caneta tamanho.
O seguinte exemplo de código mostra como usar funções caneta.
Observação
Para fazer o seguinte exemplo de código mais fácil de ler, verificação de erro não está incluído.Não usar este exemplo de código em uma configuração versão, a menos que você tenha modificado para incluir Seguro manipulação de erro.
#define NUMPT 200
HDC hDC; // Handle to the display device context
HPEN hPen, // Handle to the new pen object
hOldPen; // Handle to the old pen object
RECT rect; // A RECT structure that contains the window's
// client area coordinates
int index,
iCBHeight; // Command bar height
POINT ptAxis[2], // Two dimensional POINT structure array
ptSine[NUMPT]; // 200 dimensional POINT structure array
static COLORREF g_crColor[] = {
0x000000FF,0x0000FF00,0x00FF0000,0x0000FFFF,
0x00FF00FF,0x00FFFF00,0x00FFFFFF,0x00000080,
0x00008000,0x00800000,0x00008080,0x00800080,
0x00808000,0x00808080,0x000000FF,0x0000FF00,
0x00FF0000,0x0000FFFF,0x00FF00FF,0x00FFFF00};
// Retrieve a handle to a display device context for the client
// area of the window (hwnd).
if (!(hDC = GetDC (hwnd)))
return;
// Retrieve the coordinates of the window's client area.
GetClientRect (hwnd, &rect);
// Retrieve the height of the command bar in pixels.
iCBHeight = CommandBar_Height (g_hwndCB);
// Assign the axis points coordinates in pixels.
ptAxis[0].x = 0;
ptAxis[0].y = iCBHeight + (rect.bottom - iCBHeight) / 2;
ptAxis[1].x = rect.right - 1;
ptAxis[1].y = ptAxis[0].y;
// Assign the sine wave points coordinates in pixels.
for (index = 0; index < NUMPT; ++index)
{
ptSine[index].x = index * rect.right / NUMPT;
ptSine[index].y = (long) (iCBHeight + \
(rect.bottom - iCBHeight) / 2 * \
(1 - sin (8 * 3.14159 * index / NUMPT)));
}
// Create a dash pen object and select it.
hPen = CreatePen (PS_DASH, 1, g_crColor[5]);
hOldPen = SelectObject (hDC, hPen);
// Draw a straight line connecting the two points.
Polyline (hDC, ptAxis, 2);
// Select the old pen back into the device context.
SelectObject (hDC, hOldPen);
// Delete the pen object and free all resources associated with it.
DeleteObject (hPen);
// Create a solid pen object and select it.
hPen = CreatePen (PS_SOLID, 3, g_crColor[5]);
hOldPen = SelectObject (hDC, hPen);
// Draw a sine wave shaped polyline.
Polyline (hDC, ptSine, NUMPT);
// Select the old pen back into the device context.
SelectObject (hDC, hOldPen);
// Delete the pen object and free all resources associated with it.
DeleteObject (hPen);
// Release the device context.
ReleaseDC (hwnd, hDC);
return;