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...

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.

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 ?
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.