Pergunta

Eu estou procurando um bom classe resizer de diálogo que vai esticar e encolher itens individuais quando necessário, pois a tela é redimensionada. Stephan Keil tem um bom (DlgResizeHelper) que basicamente redimensiona tudo em uma proporção set, mas eu estou procurando algo mais inteligente.

Por exemplo:

  • Os ícones não deve redimensionar

  • caixas de texto de linha única não deve ser esticada verticalmente

  • Botões provavelmente deve ficar do mesmo tamanho

Basicamente eu estou procurando algo para olhar para todos os controles, figura que um campo de texto estático está relacionada com um controle ao lado / abaixo e âncora os dois juntos, e redimensionar grandes controles de uma forma 'inteligente' por isso parece ser bom.

Existem tais quadros lá fora? Eu tenho trabalhado em um, mas algo já feito provavelmente seria melhor.

Acompanhamento: Eu estou olhando para as soluções sugeridas. Muitos deles exigem que você ir em uma âncora cada controle na caixa de diálogo. Eu estou procurando algo inteligente que vai descobrir o que as âncoras deveriam ser, com a capacidade de âncora manualmente se as suposições estão erradas. Parece que deve ser possível - a maioria dos humanos concordaria um campo de texto estático ao lado de um campo de edição devem estar juntos ancorado. Acho que estou quase procurando um pouco de AI aqui:)

Foi útil?

Solução

Você pode usar wxWidgets. Ele substitui completamente MFC, é multi-plataforma, e dá-lhe um mecanismo de diálogo com base em layout.

Outras dicas

Eu uso ResizableLib (também faz propertysheets e Pages) fora codeproject, IIRC. Você definir pontos de ancoragem que determinam como o diálogo e controles redimensionar ou mover como o diálogo movimentos.

Você pode definir até 2 âncoras por controle, (esquerda, direita) para que você possa movê-los como os de diálogo se move, ou redimensioná-las como ele se move. É muito fácil de entender, se difícil conseguir perfeitamente certo:)

Eu tentei muitos e finalmente liquidada em http: //www.codeproject. com / KB / diálogo / layoutmgr.aspx . Ele não faz o 'inteligente' layouting que você sugere embora. Eu nunca vi isso em qualquer biblioteca, em qualquer plataforma -. Eu não vejo como ele iria trabalhar sem ter muita sob a magia capuz que teria que ser metade substituído do tempo de qualquer maneira

A biblioteca final Toolbox MFC ( aqui em CodeProject) inclui um < a href = "http://www.codeproject.com/KB/MFC/UltimateToolbox_Layout.aspx" rel = "nofollow noreferrer"> gerenciador de layout . Eu não usei isso mesmo, mas parece que ele faz o que quiser.

Você pode olhar para Profissional GUI usamos a sua biblioteca de classes para redimensionar os nossos controles de diálogo. Eu acho que é parte de sua versão gratuita.

Nós usamos classe CResize de CodeGuru para redimensionar todos os controles automaticamente. Você diga como você quer cada controle para ser redimensionada e ele faz o trabalho para você.

O paradigma de redimensionamento é especificar o quanto cada lado de um controle irá mover quando o diálogo é redimensionado.

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

Muito útil quando você tem um grande número de controles de diálogo.

código fonte

Esta é uma solução gratuita também de CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
É apenas um conjunto de macros simples que os controles de posição como o redimensiona diálogo.

Edit - seguindo os OPs comentários. Eu não sei de qualquer apoio geral sizer como QT / WX para MFC, não parece estar presente em novos frameworks como WinForms tanto.
É no QT / WX porque é necessário para várias plataformas onde widgets poderá ser de um tamanho diferente, o que explica MS falta dela. Mas também é vital para as portas multi-línguas, por exemplo. onde o alemão para cancelar é de 30 caracteres.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top