Onde é um bom lugar para começar GUIs programação para Windows?




Tenho experiência escrevendo console e aplicações cliente / servidor de rede em C e C ++, mas eu sei quase nada sobre como usar a API do Visual win32, MFC, Qt, wxWidgets, etc. Onde é um bom lugar para começar, e qual o método que devia especializar-se em, de modo a ser o futuro pronta e robusta?
Esta é uma questão bastante ampla, como aplicações de programação GUI no Windows pode ser feito de muitas maneiras.


Há duas partes principais para o desenvolvimento de qualquer aplicativo GUI: o **idioma** ea **API / quadro** . Considerando que você está interessado em aprender a criar aplicativos do Windows GUI, a língua não é realmente um ponto de foco para você. Portanto, você deve escolher um idioma que você já conhece e trabalho com um quadro ou API que pode ser aproveitada por idioma escolhido.


Se você quiser usar C você está praticamente restrita a lidar com a API Win32-se, no caso de leitura que [Petzold](http://rads.stackoverflow.com/amzn/click/157231995X) ou [Richter](http://rads.stackoverflow.com/amzn/click/0735624240) seria ótimos lugares para começar. A API Win32 pode ser muito assustador, mas vale bem a pena o esforço para aprender (IMHO). Há uma abundância de tutoriais sobre Win32 na web, e há sempre [MSDN](http://msdn.microsoft.com/) , com uma referência / guia completo para a API Win32. Certifique-se de não cobrir apenas o API, mas outras áreas como recursos / diálogos como eles são blocos de construção para a sua aplicação Win32.


Se você quiser usar C ++ você tem todas as opções que você tem quando se utiliza C mais alguns outros. Eu recomendo ir com a API Win32 diretamente, e, em seguida, avançar para um quadro conhecido como MFC, Qt, wxWindows ou GTK para que você possa gastar menos tempo trabalhando com código clichê e em vez disso se concentrar em escrever a lógica do aplicativo. Os últimos 3 opções Eu apenas listados têm a vantagem de ser multi-plataforma, assim você não precisa se preocupar muito com as questões específicas da plataforma. Dado que você disse que quer trabalhar com o Windows, eu vou assumir que você está interessado em se concentrar no que ao invés de multi-plataforma - para ir com MFC, mas passar algum tempo com a API Win32 primeiro a se familiarizar com alguns dos os conceitos.


Ao lidar com MFC e Win32 API, é uma boa idéia para tentar obter uma sólida compreensão da terminologia antes de escrever código. Por exemplo, você precisa entender o que a [bomba de mensagem](http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows) é, e como ele funciona. Você precisa saber sobre conceitos como " [desenho proprietário](http://www.codeproject.com/KB/buttons/nativewin32xpthemes.aspx) controles", e [subclasses](http://msdn.microsoft.com/en-us/library/ms997565.aspx) . Quando você entender essas coisas (e mais), você vai encontrá-lo mais fácil trabalhar com MFC, porque ele usa a terminologia similar em suas interfaces de classe (por exemplo. Você precisa saber o que "traduzir mensagens" significa antes que você possa compreender como e quando usar [PreTranslateMessage](http://msdn.microsoft.com/en-us/library/kkbhxcs2(VS.80).aspx) ).


Você também pode usar Managed C ++ para escrever aplicações GUI .NET, mas eu li em alguns lugares que Managed C ++ realmente não estava destinado a ser usado dessa maneira. Em vez disso, deve ser usado como um gateway entre código nativo / gerenciado e código gerenciado. Se você estiver usando .NET é melhor usar uma linguagem .NET como VB.NET ou C # para construir suas GUIs.


Então, se você *está* indo para usar NET, você tem atualmente a escolha do [WinForms](http://msdn.microsoft.com/en-us/netframework/aa497342.aspx) biblioteca, ou [WPF](http://en.wikipedia.org/wiki/Windows_Presentation_Foundation) . Pessoalmente, sinto que você estaria perdendo tempo aprendendo a construir aplicações WinForms dado que WPF é projetado para substituí-lo. Ao longo do tempo WPF se tornará mais prevalente e WinForms muito provavelmente vai morrer. WPF tem um conjunto API muito mais rica, e não sofre de muitas das limitações que Winforms faz. Se você escolher esse caminho, no entanto, você vai sem dúvida tem que aprender [XAML](http://msdn.microsoft.com/en-us/library/ms752059.aspx) , que é uma linguagem de marcação que impulsiona aplicativos WPF. Esta tecnologia é vinda de idade, e há muitos ótimos lugares para aprender sobre ele. Primeiro, existem sites como o [LearnWPF](http://learnwpf.com/) e [DrWPF](http://www.drwpf.com/) que têm alguns realmente grandes artigos. Em segundo lugar, há [uma abundância](http://rads.stackoverflow.com/amzn/click/0321374479) de [qualidade](http://rads.stackoverflow.com/amzn/click/0596510373)  [livros](http://rads.stackoverflow.com/amzn/click/0672328917) sobre o [tema](http://rads.stackoverflow.com/amzn/click/1590599551) .


Então, para resumir, uma vez que você escolheu seu idioma e tecnologia, o caminho é realmente muito fácil. Basta pegar um livro ou dois, ler alguns blogs, entrar em algumas amostras de código .. eo mais importante ... escrever código. Continue escrevendo, continuar a fazer erros, e continuar a aprender com eles.


Como nota final ...



> 
> Em outras palavras, Silverlight. Se você não quiser ir a rota MS que você pode dar de Adobe Flash / Flex um olhar ver. Ambos Silverlight e Flash / Flex construir RIA. Que eu acho que é para onde estamos indo. Eles dias do Office como aplicativos são numerados
> 
> 
> 


Não estou de acordo em tudo. Silverlight não é o mesmo que WPF. Silverlight é específica da web, e tem apenas um subconjunto de recursos do WPF. Dado que a questão pede para aplicativos do Windows GUI, Flash / Flex RIA Apps não são realmente uma sugestão de ajuste. Eu também não concordo que os dias de aplicativos rich client (como o Office) estão contados em tudo.


Espero que ajude. Boa sorte :)
bom dia vander, há muitos sites e empresas que fornecem aprendizado gratuíto na internet, você pode optar por esses que eu conheço e indico, são muito bons: 


microsoft:


<http://technet.microsoft.com/pt-br/bb291022>


<http://www.codelines.com/manualvb/manualvb.htm>


<http://www.microsoftvirtualacademy.com>


[www.http://channel9.msdn.com/browse/allcontent?lang=pt](http://www.http://channel9.msdn.com/browse/allcontent?lang=pt)


dell:


<http://content.dell.com/br/pt/empresa/d/campaigns/treinamento>


c++ :


<http://algoritmizando.com/desenvolvimento/curso-de-programacao-em-c-gratis/>


boa sorte!!! <p>a melhor ferramenta disponível é o fireworks. sou bastante avançado na maioria das suítes cs e devo dizer que, para o design de interface, nada supera o fireworks.</p> <p>dê uma olhada <a href="http://projecteuler.net/">project euler.</a> não há mais nada como ele para afiar suas habilidades de programação fundamental.</p> imho usa uma api como sdl2 pra aprender c++ é um péssima ideia

primeiro pq sdl2 não é c++, é c, então ela desvia dos conceitos e práticas que vc normalmente vai encontrar em apis de c++, se fosse pra usar uma api dessas ele deveria ter escolhido sfml.

segundo que ela é bem complicada, então além d… <p> <a href="http://oreilly.com/catalog/9780596009588">programação de sistemas linux</a> </p><p>você pode consultar isso também <a href="https://unix.stackexchange.com/questions/80/recommended-readings-batter-understating-of-unix-linux-internals">link</a> </p> olá jovem, seja muito bem vindo ao fórum. 
parabéns por ter iniciado tão cedo os estudos de programação. desejo excelente aprofundamento, mas não descuide da educação formal convencional (colégio, faculdade etc.). os caminhos não são excludentes, pelo contrário, eles são complementares. 
qualquer dú… as instruções estão na wiki do rofi…

[imagem]

[davatorium/rofi](https://github.com/davatorium/rofi/wiki)

rofi: a window switcher, application launcher and dmenu replacement - davatorium/rofi com o conhecimento avançado são inúmeras opções que você pode fazer. as configurações dos aplicativos e do kde estão todas na sua pasta de arquivos pessoais (no /home). então essa é a parte mais importante para vc.

como vc está começando eu recomendaria fazer o seguinte esquema a grosso modo: insta… <p>um sistema unix consiste em várias partes ou camadas, como eu gostaria de chamá-las.</p><p>para iniciar um sistema, um programa chamado carregador de inicialização fica no primeiro setor de uma partição do disco rígido. ele é iniciado pelo sistema e, por sua vez, localiza o kernel do sistema operacional e carrega-o.</p><p><strong> camadas </strong></p><ol> <li> <p>o kernel. este é o programa central iniciado pelo gerenciador de inicialização. ele faz a interação básica de hardware do sistema (disco, memória, vídeo, som) e oferece um ambiente virtual no qual ele pode iniciar programas. o kernel também envia todos os drivers que lidam com todas as pequenas diferenças entre os dispositivos de hardware. para o mundo exterior (as camadas mais altas), cada classe de dispositivos parece se comportar exatamente da mesma maneira consistente - a qual, por sua vez, os programas podem desenvolver.</p> </li> <li> <p>subsistemas em segundo plano. existem apenas programas regulares, que ficam fora do seu caminho. eles lidam com coisas como login remoto, fornecem um barramento central de mensagens e executam ações com base em eventos de hardware/rede. por exemplo, descoberta bluetooth, gerenciamento wifi, etc. quaisquer serviços de rede (servidor de arquivos, servidor de impressão, servidor web) também vivem nesse nível. nos sistemas unix, esses são apenas programas normais.</p> </li> <li> <p>as ferramentas de linha de comando. todos esses são pequenos programas que podem ser iniciados para edição de texto, download de arquivos ou administração do sistema. neste ponto, um sistema unix é totalmente utilizável para administradores de sistema. no windows, essa camada realmente não existe mais.</p> </li> <li> <p>a interface gráfica do usuário. estes também são apenas programas, a única diferença é que eles desenham janelas na tela em vez de escrever texto. isso facilita o uso do sistema para usuários regulares.</p> </li> </ol><p>qualquer serviço ou evento passará de baixo para cima.</p><p><strong> bibliotecas - a plataforma comum </strong></p><p>os programas fazem muitas coisas comuns, como exibir uma janela, desenhar coisas na tela ou baixar um arquivo. essas coisas são as mesmas para vários programas, portanto, esse código é colocado em arquivos "biblioteca" separados (arquivos <code>.so</code> - significando objeto compartilhado). a biblioteca pode ser compartilhada entre todos os programas.</p><p>para cada coisa imaginável, há uma biblioteca. existe um para ler/gravar arquivos png. há um para arquivos jpeg, para leitura de xml, criptografia, reprodução de vídeo e assim por diante.</p><p>no linux, as bibliotecas comuns para desenvolvedores de aplicativos são qt e gtk. essas bibliotecas usam bibliotecas de nível inferior internamente para suas necessidades específicas, enquanto expõem sua funcionalidade de uma maneira agradável e consistente e concisa para que os desenvolvedores de aplicativos criem aplicativos ainda mais rapidamente.</p><p>as bibliotecas fornecem a plataforma de aplicativos, na qual os programadores podem criar aplicativos de usuário final para um sistema operacional. quanto mais bibliotecas de alta qualidade um sistema fornece, menos código um programador precisa escrever para criar um programa bonito.</p><p>algumas bibliotecas podem ser usadas em diferentes sistemas operacionais (por exemplo, qt é), outras são realmente especificamente vinculadas a um sistema operacional. isso restringirá seu programa para poder executar apenas nessa plataforma.</p><p><strong> comunicação entre processos </strong></p><p>um terceiro componente de um sistema operacional é a maneira como os programas podem se comunicar. estes são os mecanismos de comunicação entre processos (ipc). estes existem em vários sabores, p. um pedaço de memória compartilhada ou um pequeno canal é configurado entre dois programas para trocar dados. há também um barramento de mensagens central no qual cada programa pode postar uma mensagem e receber uma resposta. isso é usado para comunicação global, onde não se sabe qual programa pode responder.</p><p><strong> das bibliotecas aos sistemas operacionais </strong></p><p>com bibliotecas, ipc e o kernel instalado, os programadores podem criar todos os tipos de aplicativos para serviços do sistema, administração de usuários, configuração, administração, trabalho de escritório, entretenimento, etc.) isso forma o conjunto completo que usuários iniciantes reconhecem como o "sistema operacional".</p><p>nos sistemas unix/linux, todos os serviços são apenas programas. todas as ferramentas de administração do sistema são apenas programas. todos eles fazem o seu trabalho e podem ser encadeados. resumi muitos dos principais programas em <a href="http://codingdomain.com/linux/sysadmin/">http://codingdomain.com/linux/sysadmin/</a> </p><hr><p><strong> peças distinguíveis com o windows </strong></p><p>o unix é principalmente um sistema de programas, arquivos e permissões restritas. muitas complexidades são evitadas, tornando-o um sistema poderoso, embora pareça fácil.</p><p>em detalhes, estes são os princípios que podem ser encontrados nos sistemas unix/linux:</p><ul> <li> <p>existem maneiras uniformes de acessar informações. ("tudo é apenas um arquivo"). você pode abrir um arquivo, soquete de rede, ipc, parâmetros do kernel e bloquear um dispositivo como um arquivo. daí a aparência dos sistemas de arquivos virtuais em/dev,/sys e/proc. a única api você precisa sempre de <code>open</code>, <code>read</code> e <code>close</code>.</p> </li> <li> <p>o sistema subjacente é transparente. todo programa opera sob as mesmas regras. ao contrário do windows, não há diferença artificial entre um "programa de console", "programa gui" ou "serviço em segundo plano". são todos apenas programas, que fazem coisas diferentes. todos eles também podem ser observados, analisados ​​e depurados da mesma maneira.</p> </li> <li> <p>as configurações são legíveis, editáveis ​​e podem ser anotadas com comentários. eles geralmente têm um formato no estilo ini, mas podem usar um formato personalizado para as necessidades desse aplicativo. por serem apenas arquivos, eles podem ser copiados para outros sistemas, arquivados ou armazenados em backup com ferramentas padrão.</p> </li> <li> <p>não existem aplicativos grandes "faça tudo de uma vez". o mantra é "faça uma coisa, faça bem". as ferramentas de linha de comando podem ser encadeadas e, juntas, poderosas. serviços separados (por exemplo, smtp, imap e pop e login) são subprogramas separados, evitando problemas complexos de código e segurança entrelaçados. ambientes de desktop complexos delegam trabalho duro a programas individuais.</p> </li> <li> <p><code>fork()</code>. novos programas são iniciados por um programa existente que é clonado. o clone configura tudo (por exemplo, identificadores de arquivo) e, opcionalmente, se substitui pelo novo código do programa. isso torna muito fácil aplicar as mesmas configurações e restrições de segurança a novos programas, compartilhar memória ou configurar um mecanismo ipc. o custo de iniciar um processo também é muito baixo.</p> </li> <li> <p>o sistema de arquivos é uma árvore, na qual outras partições de disco e compartilhamentos de rede podem ser montados. novamente, existe uma maneira universal de acessar dados. locais comuns do sistema (por exemplo, <code>/usr</code> podem ser facilmente montados como compartilhamento de rede.</p> </li> <li> <p>o sistema é construído para privilégios baixos do usuário. após o login, todos os usuários (exceto root) ficam confinados em seus próprios recursos, executando apenas aplicativos e arquivos. os serviços de rede reduzem seus privilégios o mais rápido possível. existe uma maneira clara e clara de obter mais privilégios ou pedir a alguém para executar um trabalho privilegiado em seu nome. todas as outras chamadas são limitadas pelas restrições e limitações do programa.</p> </li> <li> <p>todo programa armazena configurações em um arquivo/pasta oculto do diretório inicial do usuário. nenhum programa tenta gravar um arquivo de configuração global.</p> </li> <li> <p>um favor em relação aos mecanismos de comunicação descritos abertamente sobre mecanismos secretos ou mecanismos 1-para-1 específicos. outros fornecedores e desenvolvedores de software são incentivados a seguir a mesma especificação, para que as coisas possam ser facilmente conectadas, trocadas e, no entanto, permanecerem fracamente acopladas.</p> </li> </ul> boa tarde lafaiete, bom, não tenho conhecimento e experiencia com vba, no momento posso ajudar apenas com links:[url]//excelevba.com.br/category/codigos-prontos/[/url][url]https://www.dcc.fc....