Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 eWS_VSCROLLWindows.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_VSCROLLenviaWM_HSCROLLmensagens da janela do quadro para a vista atualmente ativa.O framework também encaminha mensagens de scroll de um
CSplitterWndcontrolo divisor para o painel do divisor atualmente ativo (uma vista). Quando colocado numCSplitterWndcom barras de rolagem partilhadas, umCScrollViewobjeto 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
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