Partilhar via


CScrollView Classe

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

A CView com capacidades de scroll.

Sintaxe

class CScrollView : public CView

Membros

Construtores Protegidos

Nome Description
CScrollView::CScrollView Constrói um CScrollView objeto.

Métodos Públicos

Nome Description
CScrollView::CheckScrollBars Indica se a vista de scroll tem barras de scroll horizontais e verticais.
CScrollView::FillOutsideRect Preenche a área de uma vista fora da área de deslocação.
CScrollView::GetDeviceScrollPosition Obtém a posição atual do scroll nas unidades do dispositivo.
CScrollView::GetDeviceScrollSizes Obtém o modo de mapeamento atual, o tamanho total e os tamanhos das linhas e páginas da vista rolável. Os tamanhos estão nas unidades do dispositivo.
CScrollView::GetScrollPosition Obtém a posição atual do scroll em unidades lógicas.
CScrollView::GetTotalSize Obtém o tamanho total da vista de scroll em unidades lógicas.
CScrollView::ResizeParentToFit Faz com que o tamanho da vista dite o tamanho da sua moldura.
CScrollView::ScrollToPosition Desloca a vista até um dado ponto, especificado em unidades lógicas.
CScrollView::SetScaleToFitSize Coloca a vista de scroll em modo de escala para ajuste.
CScrollView::SetScrollSizes Define o modo de mapeamento da vista de rolagem, o tamanho total e as quantidades de scroll horizontal e vertical.

Observações

Podes gerir o scrolling padrão por ti próprio em qualquer classe derivada de CView , sobrescrevendo as funções de message-mapped OnHScroll e OnVScroll member. Mas CScrollView acrescenta as seguintes funcionalidades às suas CView capacidades:

  • Gere os tamanhos das janelas e das portas de visualização, bem como os modos de mapeamento.

  • Desloca-se automaticamente em resposta a mensagens na barra de rolagem.

  • Desloca-se automaticamente em resposta a mensagens do teclado, de um rato sem deslocamento ou da roda do IntelliMouse.

Para deslocar-se automaticamente em resposta a mensagens do teclado, adicione uma WM_KEYDOWN mensagem, teste para VK_DOWN, VK_PREV e chame SetScrollPos.

Pode gerir a rolagem da roda do rato sozinho sobreescrevendo as funções de mensagem mapeada OnMouseWheel e OnRegisteredMouseWheel de membros. Como são para CScrollView, estas funções membros suportam o comportamento recomendado para WM_MOUSEWHEEL, a mensagem de rotação da roda.

Para tirar partido do scroll automático, derive a sua classe de visualização de CScrollView em vez de CView. Quando a vista é criada pela primeira vez, se quiser calcular o tamanho da vista rolável com base no tamanho do documento, chame a SetScrollSizes função membro a partir do seu sobrescrito de ou CView::OnInitialUpdateCView::OnUpdate. (Deve escrever o seu próprio código para consultar o tamanho do documento. Para um exemplo, veja o exemplo do Scribble.)

A chamada à SetScrollSizes função membro define o modo de mapeamento da vista, as dimensões totais da vista de rolagem e os valores a deslocar horizontal e verticalmente. Todos os tamanhos estão em unidades lógicas. O tamanho lógico da vista é normalmente calculado a partir dos dados armazenados no documento, mas em alguns casos pode querer especificar um tamanho fixo. Para exemplos de ambas as abordagens, veja CScrollView::SetScrollSizes.

Especificas as quantidades a deslocar horizontal e verticalmente em unidades lógicas. Por defeito, se o utilizador clicar num eixo da barra de scroll fora da caixa CScrollView , faz scroll numa "página". Se o utilizador clicar numa seta de scroll em qualquer extremidade de uma barra, CScrollView percorre uma "linha". Por defeito, uma página é 1/10 do tamanho total da vista; uma linha é 1/10 do tamanho da página. Substitua estes valores predefinidos passando tamanhos personalizados na SetScrollSizes função membro. Por exemplo, pode definir o tamanho horizontal para uma fração da largura do tamanho total e o tamanho vertical para a altura de uma linha na fonte atual.

Em vez de rolar, CScrollView pode escalar automaticamente a vista para o tamanho atual da janela. Neste modo, a vista não tem barras de deslocamento e a vista lógica é esticada ou encolhida para se ajustar exatamente à área do cliente da janela. Para usar esta capacidade de escala-para-ajuste, chame CScrollView::SetScaleToFitSize. (Chame um ou SetScaleToFitSizeSetScrollSizesoutro, mas não ambos.)

Antes de a OnDraw função membro da sua classe de vista derivada ser chamada, CScrollView ajusta automaticamente a origem da viewport para o CPaintDC objeto de contexto do dispositivo que passa para OnDraw.

Para ajustar a origem da janela de deslocação, CScrollView substitui CView::OnPrepareDC. Este ajuste é automático para o CPaintDC contexto do dispositivo que CScrollView passa para OnDraw, mas deve chamar-se CScrollView::OnPrepareDC a si próprio para quaisquer outros contextos de dispositivo que utilize, como um CClientDC. Podes sobrescrever CScrollView::OnPrepareDC para definir a caneta, a cor de fundo e outros atributos de desenho, mas chama a classe base para fazer a escala.

As barras de deslocamento podem aparecer em três locais relativamente a uma vista, como mostrado nos seguintes casos:

  • As barras de scroll padrão de estilo janela podem ser definidas para a vista usando os WS_HSCROLLestilos e WS_VSCROLL Windows.

  • Controlos de barra de deslocamento também podem ser adicionados ao quadro que contém a vista, caso em que o framework encaminha e WM_VSCROLL envia WM_HSCROLL mensagens da janela do quadro para a vista atualmente ativa.

  • O framework também encaminha mensagens de scroll de um CSplitterWnd controlo divisor para o painel do divisor atualmente ativo (uma vista). Quando colocado num CSplitterWnd com barras de rolagem partilhadas, um CScrollView objeto usará as barras partilhadas em vez de criar as suas próprias.

Para mais informações sobre a utilização CScrollViewde , veja Arquitetura de Documentos/Visualizações e Classes de Vista Derivadas Disponíveis no MFC.

Hierarquia de herança

CObject

CCmdTarget

CWnd

CView

CScrollView

Requerimentos

Cabeçalho:afxwin.h

CScrollView::CheckScrollBars

Chame esta função de membro para determinar se a vista de scroll tem barras horizontais e verticais.

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

Parâmetros

bHasHorzBar
Indica que a aplicação tem uma barra de deslocamento horizontal.

bHasVertBar
Indica que a aplicação tem uma barra de scroll vertical.

CScrollView::CScrollView

Constrói um CScrollView objeto.

CScrollView();

Observações

Deve chamar um ou SetScrollSizesSetScaleToFitSize antes de a vista de rolar estar utilizável.

CScrollView::FillOutsideRect

Chama FillOutsideRect para preencher a área da vista que aparece fora da área de deslocação.

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

Parâmetros

pDC
Contexto do dispositivo em que o recheio deve ser feito.

pBrush
Pincel com o qual a área deve ser preenchida.

Observações

Use FillOutsideRect na função de manipulador da OnEraseBkgnd vista de deslocamento para evitar repintura excessiva de fundos.

Example

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

Chama GetDeviceScrollPosition quando precisares das posições horizontais e verticais atuais das caixas de scroll nas barras de scroll.

CPoint GetDeviceScrollPosition() const;

Valor de retorno

As posições horizontal e vertical (em unidades de dispositivo) das caixas de rolagem como CPoint um objeto.

Observações

Este par de coordenadas corresponde à localização no documento para onde o canto superior esquerdo da vista foi deslocado. Isto é útil para deslocar as posições dos dispositivos do rato para as posições dos dispositivos em vista de rolagem.

GetDeviceScrollPosition devolve valores em unidades de dispositivo. Se quiseres unidades lógicas, usa GetScrollPosition em vez disso.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes obtém o modo de mapeamento atual, o tamanho total e os tamanhos das linhas e páginas da vista rolável.

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

Parâmetros

nMapMode
Devolve o modo de mapeamento atual para esta vista. Para uma lista de valores possíveis, veja SetScrollSizes.

sizeTotal
Devolve o tamanho total atual da vista de rolagem em unidades de dispositivo.

sizePage
Devolve as quantidades horizontais e verticais atuais para scroll em cada direção em resposta a um clique do rato num eixo de barra de scroll. O cx elemento contém a quantidade horizontal. O cy elemento contém a quantidade vertical.

sizeLine
Devolve as quantidades horizontais e verticais atuais para deslocar em cada direção em resposta a um clique do rato numa seta de scroll. O cx elemento contém a quantidade horizontal. O cy elemento contém a quantidade vertical.

Observações

Os tamanhos estão nas unidades do dispositivo. Esta função de membro raramente é chamada.

CScrollView::GetScrollPosition

Chama GetScrollPosition quando precisares das posições horizontais e verticais atuais das caixas de scroll nas barras de scroll.

CPoint GetScrollPosition() const;

Valor de retorno

As posições horizontal e vertical (em unidades lógicas) das caixas de deslocamento como CPoint um objeto.

Observações

Este par de coordenadas corresponde à localização no documento para onde o canto superior esquerdo da vista foi deslocado.

GetScrollPosition devolve valores em unidades lógicas. Se quiseres unidades de dispositivo, usa GetDeviceScrollPosition em vez disso.

CScrollView::GetTotalSize

Chamada GetTotalSize para recuperar os tamanhos horizontais e verticais atuais da vista de scroll.

CSize GetTotalSize() const;

Valor de retorno

O tamanho total da vista de rolagem em unidades lógicas. O tamanho horizontal está no cx elemento do CSize valor de retorno. O tamanho vertical está no cy membro.

CScrollView::ResizeParentToFit

Peça ResizeParentToFit para deixar que o tamanho da sua vista dite o tamanho da sua janela na moldura.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parâmetros

bShrinkOnly
O tipo de redimensionamento a realizar. O valor predefinido, TRUE, encolhe a janela do frame, se apropriado. As barras de scroll continuam a aparecer para grandes vistas ou janelas de estrutura pequenas. Um valor de FALSE faz com que a vista redimensione sempre a janela do quadro de forma exata. Isto pode ser algo perigoso, pois a janela de frames pode ficar demasiado grande para caber dentro da janela de frames da interface de múltiplos documentos (MDI) ou do ecrã.

Observações

Isto é recomendado apenas para vistas em janelas com moldura MDI em criança. Use ResizeParentToFit na OnInitialUpdate função handler da sua classe derivada CScrollView . Para um exemplo desta função elemental, veja CScrollView::SetScrollSizes.

ResizeParentToFit assume que o tamanho da janela de visualização foi definido. Se o tamanho da janela de visualização não tiver sido definido quando ResizeParentToFit é chamado, receberá uma assertion. Para garantir que isto não aconteça, faça a seguinte chamada antes de ligar ResizeParentToFit:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Chamada ScrollToPosition para deslocar até um dado ponto na vista.

void ScrollToPosition(POINT pt);

Parâmetros

pt
O ponto para deslocar, em unidades lógicas. O x elemento deve ter um valor positivo (maior ou igual a 0, até ao tamanho total da vista). O mesmo se aplica ao y membro quando o modo de mapeamento é MM_TEXT. O y elemento é negativo em modos de mapeamento que não MM_TEXTsejam .

Observações

A vista será deslocada para que este ponto fique no canto superior esquerdo da janela. Esta função membro não deve ser chamada se a vista for ajustada para se ajustar.

CScrollView::SetScaleToFitSize

Liga SetScaleToFitSize automaticamente quando quiseres escalar o tamanho da janela para o tamanho atual da janela.

void SetScaleToFitSize(SIZE sizeTotal);

Parâmetros

sizeTotal
Os tamanhos horizontal e vertical para os quais a vista deve ser escalada. O tamanho da vista de rolagem é medido em unidades lógicas. O tamanho horizontal está contido no cx elemento. O tamanho vertical está contido no cy elemento. Tanto cx como cy devem ser maiores ou iguais a 0.

Observações

Com barras de scroll, apenas uma parte da vista lógica pode ser visível em qualquer momento. Mas com a capacidade de escala para ajuste, a vista não tem barras de deslocamento e a vista lógica é esticada ou encolhida para se ajustar exatamente à área do cliente da janela. Quando a janela é redimensionada, a vista desenha os seus dados numa nova escala com base no tamanho da janela.

Normalmente, vai colocar a chamada na SetScaleToFitSize sua sobreposição da função membro da OnInitialUpdate vista. Se não quiseres escalabilidade automática, chama a SetScrollSizes função membro em vez disso.

SetScaleToFitSize pode ser usada para implementar uma operação "Zoom to Fit". Uso SetScrollSizes para reinicializar o scrolling.

SetScaleToFitSize assume que o tamanho da janela de visualização foi definido. Se o tamanho da janela de visualização não tiver sido definido quando SetScaleToFitSize é chamado, receberá uma assertion. Para garantir que isto não aconteça, faça a seguinte chamada antes de ligar SetScaleToFitSize:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Ligue SetScrollSizes quando a vista estiver prestes a ser atualizada.

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

Parâmetros

nMapMode
O modo de mapeamento para definir para esta vista. Os valores possíveis incluem:

Modo de Mapeamento Unidade Lógica Eixo y positivo Estende-se...
MM_TEXT 1 píxel Arredondar para baixo
MM_HIMETRIC 0,01 mm Para cima
MM_TWIPS 1/1440 pol Para cima
MM_HIENGLISH 0,001 pol Para cima
MM_LOMETRIC 0,1 mm Para cima
MM_LOENGLISH 0,01 pol Para cima

Todos estes modos são definidos pelo Windows. Dois modos de mapeamento padrão, MM_ISOTROPIC e MM_ANISOTROPIC, não são usados para CScrollView. A biblioteca de classes fornece a SetScaleToFitSize função de membro para escalar a vista ao tamanho da janela. A terceira coluna da tabela acima descreve a orientação das coordenadas.

sizeTotal
O tamanho total da vista em scroll. O cx elemento contém a extensão horizontal. O cy elemento contém a extensão vertical. Os tamanhos estão em unidades lógicas. Tanto cx como cy devem ser maiores ou iguais a 0.

sizePage
A horizontal e a vertical equivalem a rolar em cada direção em resposta a um clique do rato num eixo de barra de scroll. O cx elemento contém a quantidade horizontal. O cy elemento contém a quantidade vertical.

sizeLine
A horizontal e a vertical equivalem a rolar em cada direção em resposta a um clique do rato numa seta de scroll. O cx elemento contém a quantidade horizontal. O cy elemento contém a quantidade vertical.

Observações

Chame-o na sua substituição da OnUpdate função membro para ajustar as características de scrolling quando, por exemplo, o documento é inicialmente exibido ou quando muda de tamanho.

Normalmente, obterá informação de tamanho a partir do documento associado à vista ao chamar uma função membro do documento, talvez chamada GetMyDocSize, que fornece com a sua classe de documento derivada. O código seguinte mostra esta abordagem:

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

Alternativamente, pode por vezes ser necessário definir um tamanho fixo, como no seguinte código:

SetScrollSizes(nMapMode, CSize(100, 100));

Deve definir o modo de mapeamento para qualquer um dos modos de mapeamento do Windows, exceto MM_ISOTROPIC ou MM_ANISOTROPIC. Se quiser usar um modo de mapeamento sem restrições, chame a SetScaleToFitSize função membro em vez de SetScrollSizes.

Example

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

Consulte também

Exemplo MFC DIBLOOK
CView Classe
Gráfico de Hierarquia
CSplitterWnd Classe