Vertical barra de rolagem no CListCtrl
Pergunta
Eu estou usando um CListCtrl no ícone vista, mas rola na horizontal:
1 3 5 7 -->
2 4 6 8 -->
Eu prefiro que rolar horizontalmente:
1 2
3 4
5 6
| |
V V
Existe uma maneira de fazer isso?
Solução
Alterar o estilo de alinhamento no designer da esquerda para a Top.
Outras dicas
I parecem ter resolvido o problema usando uma visão 'Relatório'. Através do Designer VS este meio mudando o estilo 'Ver' o Relatório, resultando o controle dado o atributo LVS_REPORT no arquivo .RC. Note que este é equivalente a chamar CListCtrl::SetView(LV_VIEW_DETAILS)
no código. Isso não é suficiente no entanto. Também é necessário criar uma coluna, se você não tiver um com um par de linhas de código:
m_lstScenarios.InsertColumn(0, L"NO HEADER");
m_lstScenarios.SetColumnWidth(k_nListColScenario, LVSCW_AUTOSIZE);
Se você não quiser que o cabeçalho da coluna, defina a LVS_NOCOLUMNHEADER no Designer através do estilo do 'No Cabeçalho da coluna'.
No editor de diálogo Visual Studio, certifique-se de ter uma "lista de controle", não uma "caixa de lista".
Na lista de propriedades do editor de diálogo Visual Studio, set "No cabeçalho de coluna" para True e "View" para Report. (Definição "Alinhamento" para a esquerda não tem efeito no modo Report.)
Em OnInitDialog()
, faça o seguinte (depois de chamar OnInitDialog()
da sua superclasse):
CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
plistError->InsertColumn( 0, "" );
plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
Na verdade, isso parece dar uma autosize máximo do inicial width o controle é criado. Cordas são exibidos truncada com reticências naquele ponto. Ampliando a janela não ajuda.
Para corrigir isso, adicione um OnSize()
método para sua subclasse CDialog
que mais uma vez lembra a lista que é mais amplo. (Isso pressupõe que o alargamento da janela é o que deixaria a exibição CListCtrl
mais texto. Se você tem algum outro meio, como um botão, tente esta chamada SetColumnWidth()
onde você está fazendo isso.)
WinProgress::OnSize() {
CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
Você pode então adicionar novas linhas para a parte inferior da lista com um código como:
CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
int iCount = plist->GetItemCount();
plist->InsertItem( iCount, "Next Item" );
Os produtos muito grande para a lista mostrará elipses em primeiro lugar. Quando você redimensionar a janela no entanto ligeiramente, em seguida, os itens da lista de largura ao tamanho completo e uma barra de rolagem horizontal aparece se necessário. Não é bem 10/10, na medida em que look and feel estão em causa, mas até mesmo programadores GUI experiente provavelmente não aviso prévio.
No controle de lista, para o conteúdo de vídeo com imagem em única coluna com deslocamento vertical .add seguinte código, Em função PreCreateWindow, adicione o seguinte linha cs.style | = (LVS_REPORT | LVS_NOCOLUMNHEADER); e em função OnIntialUpdate adicione o seguinte linha, fileList.InsertColumn (0,"", LVCFMT_LEFT | LVCFMT_IMAGE, 120, -1); ShowScrollBar (SB_VERT, 1); após isso, onde quer que você deseja inserir dados na lista você pode, mas tome cuidado para que você definir imagelist e inserção de dados usando InsertItem por exemplo: fileList, InsertItem (0, "Índia", 1); onde 1-> é o índice de imagem em imagelist.