Qui, le cas échéant, réalise Windows look natif: GTK+, wxWidgets, Qt, FLTK?
J'ai besoin d'écrire une application qui sera visuellement indiscernable de quelque chose écrit nativement pour Windows XP / Vista / 7 en utilisant tout ce qui vient par défaut avec le Visual Studio le plus moderne. Mais je développe en utilisant MinGW et Vim (en C++).
En particulier, je veux que les contrôles suivants soient natifs sur les trois versions de Windows ci-dessus: form chrome, boutons, cases à cocher, menus, zones de liste déroulante, barres de progression, barres de défilement, zones de texte enrichi. Ce sera assez pour moi.
Je sais que si vous chargez GdiPlus et d'autres choses comme riched32.dll
au besoin, et utilisez L'API Windows pour instancier les contrôles, le système d'exploitation remplacera sa version de GdiPlus ou une autre bibliothèque, de sorte qu'il ressemblera à des contrôles de style XP sur XP, Vista sur Vista, etc.
Mais je ne veux pas utiliser L'API Windows ordinaire, car même la récupération de la police par défaut prend une demi-page de code, et des histoires similaires tout ce que je veux faire. Donc je voudrais utiliser un Toolkit.
WxWidgets, Qt, GTK+, FLTK semblent être les plus largement utilisés. Mais ils sont tous de la croix-plate-forme. J'ai utilisé des applications multi-plateformes, et beaucoup d'entre eux ont des contrôles GUI étrangers (je les appelle des widgets). Donc, ma question Est: lequel de ces toolkits peut être fait pour produire de vrais contrôles D'interface utilisateur natifs énumérés ci-dessus, apparaissant correctement sur les trois versions de MSWin énumérées ci-dessus?
J'ai tapé chacun d'eux +" windows" dans Google Images, mais il est difficile de dis, sauf que FLTK ne peut probablement pas le faire. Beaucoup d'entre vous doivent connaître la réponse du haut de votre tête...
4 réponses
Je ne parlerai pas de FLTK car je ne le connais pas.
- wxWidgets utilise la boîte à outils native de la plate-forme, (GTK sur Linux, MFC sous Windows, Cocoa sur MacOS X).
- GTK utilise une API de thématisation pour simuler l'apparence de la plate-forme (moteur de thématisation personnalisé sur GTK2, moteur basé sur CSS sur GTK3).
- Qt utilise styles pour simuler l'apparence de la plate-forme.
WxWidgets API est assez laid de ma propre expérience, car il y avait trop de méthode juste disponible sur l'une ou l'autre plate-forme rendant les choses non portables à moins que vous ne le contourniez. Contrairement à GTK + et Qt, il ajoute également sa propre couche de bogues au-dessus de la boîte à outils qu'il utilise comme backend. Cependant, il s'efforce d'avoir l'aspect natif de la plate-forme car il utilise la boîte à outils native.
GTK + 3 a encore quelques bords rugueux sur Windows, qu'il supporte officiellement depuis GTK + 3.6. Le projet GTK + délègue au projet MSYS2 la distribution des binaires Windows. Comme vous utilisez déjà MinGW, c'est à peu près le même genre d'environnement. Ils ont de bonnes liaisons C++ avec GTKmm. Cependant, vous pouvez avoir du travail pour obtenir le droit de thématisation pour votre version de Windows.
Qt est un bon choix pour le développement c++ multiplateforme avec la cible principale étant Windows, essaie d'imiter l'apparence native de la plate-forme mais a ses propres limitations de thématisation aussi.
Pour résumer, il n'y a que 2 approches:
- toolkits qui fournissent leurs propres widgets et essayez de ressembler à la plate-forme native en fournissant thématisation (GTK + et Qt)
- boîtes à outils qui utilisent les widgets natifs mais cachent leur API derrière une couche d'abstraction (wxWidgets)
, les Deux ont leurs avantages et leurs inconvénients.
Détails D'implémentation mis à part, la philosophie de wxWidgets est, et a toujours été, de regarder aussi nativement que possible. Nous, développeurs wxWidgets, n'atteignons pas toujours l'objectif de regarder indistinctement à partir des applications natives, mais nous nous efforçons toujours de le faire et. AFAIK ce n'est pas un objectif si important pour Qt et certainement pas pour GTK+, donc dans mon opinion (évidemment biaisée), wxWidgets est votre meilleur choix si vous êtes sérieux au sujet de fournir la meilleure expérience pour vos utilisateurs, en particulier sous OS X.
Pour répondre plus précisément à votre question, tout ce que vous listez ci-dessus est implémenté en utilisant des contrôles natifs dans wxWidgets pour Windows (le contrôle de texte enrichi n'est pas disponible nativement sous les autres plates-formes).
IUP-bibliothèque D'Interface utilisateur Portable utilise des widgets natifs, API C et liaisons Lua.
J'ai utilisé java pour natif multi-plateforme sans changer le code, utilisé c / c++ wxwidgets pour exclusivement multi-plateforme si vous voulez aller à peu de performance et exécutable autonome, utilisé C / C++ winapi pour windows et x11 pour gnu linux plate-forme native et console de terminal, utilisé python pour la console de script et la plate-forme si vous voulez que votre logiciel à jour rapidement, et utilisé l'assemblage pour un peu simple purement console. Et parfois, je les ai tous combinés avec une bibliothèque partagée .dll sous windows et . donc sur gnu linux. Et j'ai aimé faire pour faire des performances comparatives sur des études de programmation avec de petites exigences matérielles.