# Saturday, October 24, 2009

Visual Studio 2010 apporte son lot de nouveautés pour les développeurs C++ natif avec une nouvelle version des MFC !

Les développeurs en C++ natifs ne sont pas abandonnés, même si la plupart d'entre eux sont morts depuis longtemps ! ;-) Déjà, Visual Studio 2008 avait apporté son lot de nouveautés avec le service pack 1. Peut-être que Microsoft considère que les vrais développeurs, en plus de ne pas manger de quiche, programment en code C++ natif ?

Ribbon Designer

Le plus spectaculaire est le nouveau Ribbon designer. Il permet d'intégrer une interface de type Ribbon (comme celle d'Office 2007, ou de Paint dans Windows 7) dans une application C++/MFC sans coder, de la même manière qu'on intègre un menu. Visual C++ 2010 possède un nouveau type de ressource : le Ribbon. Au même titre que les toolbars, boîtes de dialogues...

Visual Studio 2010 Screenshot Ribbon MFC
Le ribbon-designer de Visual Studio 2010 pour les MFC

(Oui, il faudrait que je refasse la maquette de ce blog !)

Ribbon... mais de quel ribbon parle-t'on ?

Précision : ce ribbon-designer n'est pas destiné à créer des interfaces utilisateurs se basant sur le nouveau contrôle Ribbon-Scenic livré avec Windows 7. Il n'est utilisable qu'en C++ et en utilisant les MFC. L'avantage est que l'application peut s'exécuter à la fois sous Windows XP, Vista et Windows 7.

Comment ça marche ?

La première étape est de créer un Ribbon dans les ressources du projet. Cela crée automatiquement un fichier XML associé. Dans ce seront ajoutés les descriptions des onglets, groupes et contrôles du Ribbon. Un fichier XML, oui. Pas un fichier XAML ! En fait le XML suffit j'imagine...

En éditant le Ribbon, on ouvre le Ribbon-designer. Dans cette fenêtre, on peut glisser-déplacer des onglets, des groupes, des contrôles, créer des sous-menus, affecter des images à des boutons, créer les commandes pour associer le code à l'interface... bref, effectuer le design de l'interface.

Visual Studio 2010 Screenshot Ribbon MFC
Modification des propriétés d'un bouton du ribbon

L'éditeur de Ribbon génère un fichier XML décrivant l'interface utilisateur. Lors de la compilation du projet, ce fichier XML est inclus dans les ressources, et donc dans le binaire. Pour charger le ribbon dans la fenêtre principale, trois lignes de code suffisent :

CMFCRibbonBar m_wndRibbon;

m_wndRibbon.Create(this);
m_wndRibbon.LoadFromResource(IDR_RIBBON);

On dirait du code C# tellement c'est simple, n'est-ce pas ? :-D Et puis, pour une fois dans la rubrique "je crée une interface en 5 minutes", les développeurs C++ natifs sont privilégiés par rapport à leurs homologues C# car ce designer n'existe que pour du code C++. Il n'en existe pas de version pour Winform ni pour WPF/Silverlight dans Visual Studio 2010 .

Le Ribbon est disponible avec plusieurs looks. En plus des looks présents dans Visual Studio 2008 (ceux avec les bouton rond, comme dans Office 2007), un nouveau look ressemblant au Ribbon de Windows 7 a été ajouté. Et, fin du fin, il est possible de changer de look à la volée, pendant l'exécution du programme.

Voici deux captures d'écran de la même application. Le look a été modifié grâce au menu Style en haut à droite du ribbon.


Application C++/MFC avec Ribbon look Office 2007 black

 


Application C++/MFC avec Ribbon look Windows 7

 

Sauvegarde automatique des documents en cas de plantage

Imaginez, vous saisissez un document et votre application C++/MFC plante. Votre travail est perdu ? Non ! Les classes MFC de Visual Studio 2010 contiennent un gestionnaire de sauvegarde automatique (sérialisation automatique des documents toutes les 5 minutes par défaut si l'option est activée). En cas de plantage, le crash est intercepté et le travail en cours est copié dans des fichiers temporaires. Au prochain lancement du programme, les MFC proposeront automatiquement d'ouvrir les fichiers temporaires et de restaurer le travail interrompu.

Cette fonctionnalité est très simple à mettre en oeuvre si l'on respecte l'architecture générale des MFC. Il s'agit de mettre en place quelques callbacks. Je ne l'ai pas encore testée, mais dès que je le fais je mets le code en ligne. Ce filet anti-plantage est supporté sous Vista et Windows 7, pas sous Windows XP : le système d'exploitation effectue une partie du travail en interceptant le plantage.

 

Support dans les MFC des interactions avec la barre des tâches de Windows 7

Encapsulation des interactions avec la taskbar win7 dans les MFC pour faciliter l'intégration avec Win7.

Une nouvelle fonction toute simple a été ajoutée à la class CWinApp :

   EnableTaskbarInteraction(TRUE);

Elle permet d'afficher dans la barre des tâches de Windows 7 les différentes fenêtres MDI de l'application dans des miniatures différentes, comme Internet Explorer 8 le fait, ainsi que la liste des documents récents En une seule ligne de code !

Cette fonctionnalité n'a pas l'air d'être complètement terminée dans cette version béta 2. En attendant la version finale, pour illustrer l'intégration d'une application dans la barre des tâches de Windows 7, voici une capture d'écran de MSN Messenger !

 

Les TaskDialog aussi simples à utiliser que les MessageBox

Les MFC incluent le support des Task Dialogs apparues avec Windows Vista d'une manière élégante et très simple à mettre en oeuvre. Il est recommandé de les utiliser le plus souvent possible à la place des MessageBox.

Voici le code correspondant :

INT_PTR nResult = CTaskDialog::ShowDialog(
   _T(
"Choisissez si vous souhaitez enregistrer vos modifications ou non."), 
   _T(
"Vous n'avez pas sauvegardé votre travail."), 
   _T(
"Budget"), IDS_SAVE_YES, IDS_SAVE_CANCEL, TDCBF_CANCEL_BUTTON);

Plus d'infos sur le site MSDN.

 

Autres fonctionnalités, intégration des applications dans le système

En vrac :

  • Les MFC sont compatibles avec les périphériques multitouch. Les MFC génèrent correctement les évènements correspondants à ces périphériques.
  • Intéractions avec le système de recherche de Windows : les types de documents propriétaires gérés par une application MFC peuvent être indexés par Windows pour la recherche dans les documents de Windows.
  • Les MFC peuvent générer des miniatures des documents compatibles avec les miniatures de l'explorateur de Windows.

C'est tout. Pour le moment.

 

Tags  |  | 
 24 October 2009, 00:34
# Wednesday, October 21, 2009

Il a été annoncé que les abonnés MSDN pouvaient obtenir la béta 2 de Visual Studio 2010 sur le site MSDN. Quant à ceux qui n'ont pas d'abonnement MSDN, ils peuvent télécharger la béta 2 ici sur le site Microsoft.com.

Il est possible d'installer VS 2010 à côté de VS 2008, sur la même machine. Les deux environnements fonctionnent indépendamment sans problème. Pratique (indispensable ?) pour migrer les projets.

Cependant il y a un petit bug dans le setup de VS2010 qui se produit si vous avez installé le SDK de Silverlight 3 RTM. A la fin de l'install, vous aurez ce message d'erreur :

Visual Studio 2010 setup problem with Silverlight

Tout s'est bien passé, sauf que VS 2010 veut installer "Silverlight 3 SDK GDR 2" (General Distribution Release 2, qui date de fin août 2009), et qu'il n'arrive pas à l'installer si vous avez déjà "Silverlight 3 SDK RTM". Problème de conflit de version donc. Car il existe déjà 3 versions de Silverlight 3 (voir les détails sur le blog de Tim Heuer) :

  • RTM: 3.0.40624 (La version dont "tout le monde" a installé le SDK)
  • GDR 1: 3.0.40723
  • GDR 2: 3.0.40818 (La dernière version que "personne" n'a vu passer)

    La solution... est de désinstaller "Microsoft Silverlight 3 SDK" par le panneau de contrôle AVANT d'installer VS 2010 beta 2.

    Si vous avez déjà installé VS 2010 et obtenu ce message d'erreur, vous avez peut-être constaté que Silverlight a l'air de fonctionner correctement avec VS 2010. En fait, tout est OK, sauf que vous n'avez pas la toute toute dernière version du SDK de Silverlight. Microsoft conseille de désinstaller Silverlight 3 SDK et de réinstaller VS 2010... Voir sur le blog de Mike Snow.

    Mais j'imagine qu'on peut simplement installer le SDK Silverlight 3 GDR2 après avoir désinstallé le SDK Silverlight 3 RTM si on désire vraiment avoir le tout dernier SDK de Silverlight 3...

  •  21 October 2009, 22:50