# Tuesday, December 15, 2009

Une conférence sur le C++ et Visual C++ 2010 aux Techdays 2010 ! Dans la partie Architecture et développement, section Outils, langages et Frameworks :

Venez découvrir dans cette session les nouveautés que vous offre Visual Studio C++ tant en termes de développement d'interface graphique qui adhère à Windows 7, qu'en termes de nouveautés du langage qui colle à la norme C++0X. Nous parcourons également quelques fonctionnalités de l'IDE qui permettent à un développeur C++ d'être plus productif.

On dirait que la conférence de Boris Jabes du PDC 09 dont j'ai déjà parlé va être reprise aux techdays. Super !

 

Tags  |  | 
 15 December 2009, 18:59
# Friday, November 27, 2009

Il y a pas mal d'applications qui ont été écrites en C++ natif, avec les MFC. Ou bien avec ATL.

La bonne nouvelle c'est que Visual Studio 2010 nous donne les moyens de moderniser ce genre d'application, et de les remettre au goût du jour.

Avant Visual Studio 2010 on se disait :

" Bon, on a cette application C++/MFC dont l'écriture a commencé il y a 6 ou 10 ans. Maintenant la tendance et les derniers gadgets à la mode sont dans .NET : Winforms ou WPF. Alors on va migrer l'application vers .NET. "

Et commençait un long périple qui avait plusieurs issues possibles, selon les cas. Les exemples cités ici sont de vrais cas, seuls les noms ont été changés ;-) :

1ère solution : les devs prennent la décision de tout réécrire from scratch en WPF (ou en Winform) et arrivent à convaincre leur hiérarchie. Effet tunnel, ça prend deux ans. Il faut payer l'équipe de développement pendant ce temps parce que rien ne sort. Et à la fin, si ça aboutit (des fois ça n'aboutit pas), on a les mêmes fonctionnalités qu'avant. Avec un look and feel plus sympa et moderne quand même. Le marketing râle après le développement : "Quoi ?! Il vous a fallu deux ans pour faire ça ? Et on a quoi de neuf nous à vendre aux clients ? On avait déjà toutes ces fonctionnalités avant". Les développeurs ont passé leurs nuits pour tout refaire en C#. Au moins le code est en .NET, et il est propre. Mais ça a coûté très cher. Entrer dans ce genre d'aventure et s'en sortir n'est possible qu'avec de bons développeurs et un excellent encadrement technique.

2eme solution : Le chef déclare qu'il faut faire une migration vers .NET petit à petit, écran par écran. Pour éviter l'effet tunnel. Alors commence une longue souffrance pour l'équipe de développement. Les écrans vont être réécrits en .NET un par un, et intégrés dans le projet C++ natif avec de l'interop. Au bout de quelques semaines, le chef voit qu'il a des boîtes de dialogue en .NET (Winform par exemple) dans son application. Il a l'air content. Mais il ne voit pas l'usine à gaz en dessous. Si certains développeurs comprennent ce qu'ils font et le font proprement, il peut arriver que d'autres ne comprennent pas bien. Réaliser ce genre d'intégration avec de l'interop n'est pas si simple qu'il n'y paraît. J'ai vu du code C++ natif appeler du code C#, qui rappelait du code natif, qui à son tour appelait du code C#. Je n'ai pas vu de projet conséquent de ce genre arriver à terme. Ca a fini dans un mélange infâme de code natif et managé. Mais des fonctionnalités on pu être ajoutées au projet pendant que des écrans étaient réécrits en C#, et le marketing est content.

Heureusement Visual Studio 2010 propose une autre approche avec de nouvelles fonctionnalités pour les projets C++. Une troisième solution devient possible pour mettre à jour une vieille application C++ ! La mettre au goût du jour avec les nouvelles fonctionnalités proposées dans Visual Studio 2010 !

3eme solution : Quelques programmeurs C++ vont pouvoir changer l'interface utilisateur, connecter l'application au Web, ajouter quelques gadgets sexy, gérer le parallélisme pour profiter des processeurs modernes, etc. Et tout ça en quelques semaines seulement.

La conférence sur Visual C++ 2010 que j'ai citée dans le billet précédent sur la conférence PDC résume comment faire. 

Et puis, j'effectue moi-même en ce moment la migration d'un projet C++/MFC commencé il y a... 16 ans ! Il fonctionne toujours, est très rapide, et consomme très peu de mémoire.

Voici une capture d'écran d'un logiciel écrit proprement en C++ depuis 16 ans, toujours en cours de développement avec VS 2010, et qui ne fait pas son âge.

Oui, on ne dirait pas une application dont l'essentiel du code date de plus de 15 ans...

Je détaillerai très bientôt les étapes à effectuer pour une migration de ce genre dans des billets à venir.

 

 

Tags  |  | 
 27 November 2009, 16:47
# Thursday, November 19, 2009

En ce moment se tient la conférence microsoft pour les développeurs, vous le savez sans doute. Les conférences sont déjà disponibles en streaming HD (merci Silverlight !) ou en téléchargement WMV.

Pendant que tout le monde est en train de parler de Silverlight 4, j'ai quand même noté que Microsoft apporte pas mal de nouveautés à Visual Studio 2010 concernant C++, et qu'il y a plusieurs conférences sur le sujet ! En anglais of course...

Le point d'entrée est sans doute la conférence de Boris Jabe, Accelerated Windows Application Development with Microsoft Visual C++ 2010, qui est à mon sens indispensable pour tout utilisateur du langage C++. Oui c'est en anglais mais je peux faire des sous-titres en français si vous me le demandez ?

Ce développeur de Visual C++ passe en revue les nouveautés de Visual C++, de l'IDE en passant par le langage, et parle notamment des nouveautés concernant le développement parallèle. Je me posais des questions dans mon précédent post sur Visual C++ 2010, des réponses y sont apportées. J'y reviendrai.

Par exemple, les expressions lambda de C++0x facilitent réellement la programmation multitâche. Au sujet du partage de variables entre threads, je voudrais citer de mémoire une phrase de Boris qui m'a bien fait rire : "Une manière de faire est de le faire à la C#, en passant tout en paramètre sans se soucier des performances ni de l'occupation de la mémoire" ;)

D'autres conférence sur le sujet promettent d'être intéressantes, Boris Jabe nous en sélectionne quelques unes dans une de ses slides. Slide affichée dans une application MFC, évidemment ! :D


Boris Jabe présente Visual C++ 2010, et sélectionne quelques conférences que tout développeur C++ devrait regarder !

Rendez-vous sur www.microsoftpdc.com pour les regarder.

 

Tags  |  | 
 19 November 2009, 15:00
# 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
# Thursday, July 23, 2009

Depuis le Feature Pack (et SP1) de Visual C++ 2008, les MFC contiennent un ruban ("ribbon") similaire à celui que l'on trouve dans Office 2007. On pouvait écrire des applications en utilisant cette fonctionnalité des MFC, comme cet exemple :


Le contrôle "ribbon" des MFC

Il se murmurait à l'époque de la sortie de ce Service Pack, que l'interface de type Ruban serait très courante sous Windows 7, comme je l'écrivais ici il y a plus d'un an.

Eh bien Windows 7 contient un contrôle Ribbon par défaut, le "ScenicRibbon". Il n'a pas tout a fait le même look que celui des MFC. Le problème, c'est que le Ribbon de Windows 7 n'est pas le même que celui des MFC !


Le contrôle "Ribbon" de Windows 7

Ces deux éléments sont totalement distincts et ne se programment pas de la même façon. Celui de Windows 7 utilise un fichier XML pour décrire les onglets, boutons... Par exemple, pour créer deux bouton "Copier" et "Coller" dans un groupe :

   <Group CommandName="cmdEdit" SizeDefinition="TwoButtons">
      <
Button CommandName="cmdCopy" />
      <
Button CommandName="cmdPaste" />
   </
Group>

Le SDK de Windows 7 inclus un outil pour compiler ce fichier XML de description d'interface. Ca ressemble à du XAML, mais ce n'en est pas ! C'est une sorte de fichier Ressource en XML, utilisé en code natif ! La documentation du ScenicRibbon de Windows 7 est ici sur MSDN.

 

Par contre, pour ajouter un bouton ou un groupe dans le Ribbon des MFC, il faut écrire du code "en dur" dans le programme, comme par exemple :

   // Crer le panneau "Presse-papiers":
   strTemp.LoadString(IDS_RIBBON_CLIPBOARD);
   CMFCRibbonPanel* pPanelClipboard = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));

   // Crée le bouton "Coller"
   strTemp.LoadString(IDS_RIBBON_PASTE);
   CMFCRibbonButton* pBtnPaste =
new
CMFCRibbonButton(ID_EDIT_PASTE, strTemp, 0, 0);
   pPanelClipboard->Add(pBtnPaste);

   // Crée le bouton "Couper"
   strTemp.LoadString(IDS_RIBBON_CUT);
   pPanelClipboard->Add(
new CMFCRibbonButton(ID_EDIT_CUT, strTemp, 1));

Le contrôle "Ribbon" devient presque incontournable. Celui de Windows 7 est beaucoup plus flexible à programmer. Il est quand même plus facile et souple de décrire une interface utilisateur en XML que d'écrire du code C++ en dur ! Au point que si une DLL redistribuable du Ribbon Windows 7 était disponible pour Vista et XP, on jetterait bien vite le Ribbon des MFC à la poubelle. Le problème est qu'apparamment le Scenic Ribbon ne sera disponible que pour Vista et 7, pas pour XP (http://channel9.msdn.com/pdc2008/PC14/).

Et, pour une fois, les programmeurs natifs C++ sont avantagés par rapport aux programmeurs Winform. Le framework .NET ne contient pas (encore) de ribbon. Mais Microsoft propose un Ribbon en add-in pour WPF, que l'on peut télécharger, en plus de .NET 3.5 : http://windowsclient.net/wpf/wpf35/wpf-35sp1-ribbon-walkthrough.aspx

Evidemment je ne mentionne pas les différents éditeurs de composants payants pour MFC (Codejock, BCG) ou .NET (Infragistics...) qui proposent des ribbons.

Tags  |  | 
 23 July 2009, 17:23
# Saturday, March 21, 2009
La nouvelle version de Silverlight 3 vient d'être dévoilée en version beta depuis quelques jours. Le site www.silverlight.net centralise toutes les infos et outils de développement.

Découvrir Silverlight 3 : l'ebook !

Laurence Moroney (son blog ici) a publié il y a quelques mois un livre sur Silverlight 2 en anglais, traduit en français chez Microsoft Press. Un bon bouquin pour découvrir Silverlight.

Découvrir Silverlight 2, de Laurence Moroney

Incroyable, une suite de ce livre est déjà disponible sous la forme d'un ebook en PDF pour Silverlight 3 : First look : Microsoft Silverlight 3.

Sommaire de "First look : Microsoft Silverlight 3" :
  • 3D Effects with Perspective Transforms
  • Animation Easing
  • H264 Video Support
  • Pixel Shaders
  • Out-of-Browser Applications
  • Save File Dialog Box
  • XAML Element Databinding

Les applications Silverlight arrivent sur le desktop (pour remplacer WPF ?)

La possibilité d'installer des applications Silverlight sur le PC, et de les exécuter comme des applications indépendantes est une petite révolution dans le monde du développement d'applications desktop. Silverlight se met à marcher sur les plates-bandes des applications desktop C#/.NET classiques (Winforms ou WPF)... et peut-être même des applications MFC/C++ natives.

Evidemment, Winforms, WPF, et C++ natif ont leur spécificités et peuvent être des environnements irremplaçables dans certains cas.

Mais pour le développement d'une nouvelle application, ou la migration d'une application existante, Silverlight peut être envisagé comme une alternative crédible à Winforms, WPF et même C++. Surtout si l'application doit être disponible à la fois en ligne et hors ligne.

Pour caricaturer, on pourrait dire qu'une application Winforms est déjà démodée, qu'une application WPF ne sera pas forcément très rapide et nécessitera de grosses configurations matérielles pour fonctionner, et que l'application C++ aura beaucoup de mal à fonctionner via Internet. Mais Silverlight 3 aura des limitations dans ses fonctionnalités qui pourront être rédhibitoires.

Winforms, WPF, C++ natif, Silverlight : 4 technos de développement d'applications. Sans parler d'Adobe Flex !

D'ailleurs il se murmure que WPF pourrait être une victime collatérale de la guerre que se livrent Microsoft avec Silverlight, et Adobe avec Air : WPF est un Silverlight en beaucoup plus lourd, et son seul avantage est qu'il a un runtime plus puissant (voir l'article : Silverlight 3 might kill WPF par exemple). Tim Sneath a écrit un article très intéressant sur les différences entre les runtime Silverlight et .NET classique. En le lisant je me dis que ma foi, Silverlight a l'air bien fichu de l'intérieur.

Tags  |  | 
 21 March 2009, 00:15
# Monday, August 18, 2008

Microsoft a profité de ce que j'avais le dos tourné (voir photo ci-dessous), pour sortir une mise à jour SP1 pour Visual Studio 2008 et aussi pour .NET 3.5. A peine rentré des Alpes Suisse, je me jette évidemment sur MSDN pour télécharger la bête.

Le lac Thunsee, dans les Alpes Suisses, près de Bern.</
Le lac Thunsee, dans les Alpes Suisses, près de Bern.

Le SP1 de Visual Studio 2008 est dispo pour les versions gratuites (express) et professionnelles de Visual Studio. En anglais et en français. Pour télécharger le SP1, c'est ici pour les versions pro ou ici pour les versions express. Après avoir accepté le contrat-de-licence-qu'on-ne-lit-jamais, le programme d'installation se débrouille tout seul. Environ une heure après (quand même), me voici avec la version RTM du SP1 de .NET 3.5 et de Visual Studio 2008 :

A propos de Visual Studio 2008 SP1

Il y a déjà eu pas mal d'articles sur les nouvelles fonctionnalités apportées par ce SP1 en français sur le blog de Mitsu ou en anglais : la liste entière des modifications est dans la base de connaissance de Microsoft : http://support.microsoft.com/kb/945140. Plein de trucs sur ASP.NET, WPF, Linq, etc. Aussi, les applications WPF se lancent plus rapidement, c'est clair.

Le nombre de fonctionnalités ajoutées est impressionnant. Surtout pour .NET 3.5 SP1, il s'agit plus d'une nouvelle version que d'un Service Pack ! .NET 3.5 SP1 contient la version 3 de WPF, après WPF 1 sorti avec Vista et .NET 3.0, WPF 2 sorti avec Visual Studio 2008 et .NET 3.5.

Le SP1 pour Visual C++

Le SP1 de Visual Studio 2008 contient les nouveautés déjà présentées dans VC++ 2008 Feature Pack (la nouvelle version des MFC, et C++ TR1). Mais comme le VC++ 2008 Feature Pack est sorti il y a quelques mois déjà, le SP1 de Visual Studio y apporte de nombreux correctifs dans le compilateur C++ (bugs corrigés), dans les extensions TR1, ainsi que dans les MFC (voir http://blogs.msdn.com/vcblog)

Si vous avez déjà installé VC++ 2008 Feature Pack, il est donc conseillé d'installer en plus Visual Studio SP1, car ce dernier contient une mise à jour du Feature Pack.

Autrement dit, le Feature Pack est à mettre à la poubelle, il est remplacé par le SP1 de Visual Studio.

Un Datagrid dans WPF 3.5 SP1 !

Il manquait un contrôle datagrid dans WPF. Plusieurs éditeurs indépendants ont fourni des contrôles Datagrid, payants ou gratuits (Xceed ou Infragistics). Ce grand manque est désormais comblé... d'une manière originale. Microsoft propose un Toolkit WPF en téléchargement sur le site www.codeplex.com/wpf. Ce toolkit contient entre autres, un datagrid, et nécessite WPF 3.5 SP1 pour fonctionner. Le code source est même disponible !

Comme Microsoft aime bien les fournisseurs de composants indépendants, il ne va pas trop leur faire concurrence. Le Data Grid de WPF ne sera jamais aussi puissant que le Data grid payant d'Infragistics par exemple. Même si la version actuelle est encore en CTP, il ne faut pas s'attendre à voir ce contrôle devenir le meilleur des datagrid du monde ! Mais il peut rendre des services...

Le blog de Jaime Rodriguez contient une série d'articles sur l'utilisation de ce nouveau contrôle Data Grid pour WPF :


Un exemple d'utilisation par Jaime Rodriguez du nouveau contrôle Data Grid de WPF

Ce Toolkit WPF contient également un outil pour pouvoir construire plus facilement des Pixel Shaders. Il y en a qui vont s'amuser comme des petits fous ! Toutes les infos sur ce nouvel outil sur le blog de Greg Schechter, le "spécialiste" des Pixels Shaders en WPF.

Le code source du framework .NET 3.5 SP1 pas encore disponible

Depuis quelques mois, il était possible avec Visual Studio 2008 d'utiliser le code source du framework .NET 3.5. en mode Debug. Visual Studio 2008 sait télécharger le code source d'une partie de .NET pour le mettre à disposition de tout programmeur .NET, comme expliqué par exemple par ClaueR.

Les nouvelles options de téléchargement du code du framework .NET
Les nouvelles options de téléchargement du code du framework .NET

Avec Visual Studio 2008 SP1, les options de téléchargement du code source du framework .NET sont mieux pensées, mais le problème est que le code source de .NET Framework 3.5 SP1 n'est pas encore disponible ! Des fichiers PDB sont présents, mais ils ne contiennent pas (encore ?) les informations sur le code source.

Alors, si vous avez absolument besoin d'utiliser le code source du framework .NET 3.5 en mode debug, n'installez pas encore le SP1 ! Attendons que Microsoft mette en téléchargement le code source de la dernière version de .NET.

Nouveautés du mode debug (managed)

En mode pas à pas, le menu contextuel (clic droit de la souris) contient des entrées supplémentaires. Le très pratique "Step into Specific" est disponible sur un appel de fonction, et permet de spécifier comment tracer à l'intérieur de la dite fonction.


Nouveau menu contextuel en mode debug

Il y a beaucoup d'autres nouveautés dans ce SP1, à télécharger d'urgence donc. Sauf si l'on a besoin d'utiliser le code source du framework .NET pour l'instant.

Tags  |  |  | 
 18 August 2008, 17:47
# Wednesday, June 25, 2008

Le nouveau livre sur les MFC de PackT PublishingNooooonnnn ? Un NOUVEAU livre sur les MFC ?? Aucun livre n'était sorti sur les MFC depuis... au moins... trois siècles !

Evidemment, il est en anglais... Après la fermeture de O'Reilly-France, nous n'aurons plus beaucoup de livre informatique en français...

Ce livre de 370 pages devrait être disponible d'ici quelques jours, soit en version PDF directement sur le site de l'éditeur[^], soit en version papier. Bientôt disponible sur Amazon également.

C'est un livre pour apprendre comment utiliser les MFC, pour ceux qui connaissent un peu le C++, ou qui ont déjà programmé des applications Windows en C#.

Les principaux concepts des MFC sont expliqués et mis en pratique dans des exemples concrets d'applications simples.

Bref, il a l'air bien pour se mettre (ou se remettre!) aux MFC.

Il coûte 31,49 euros, et les frais de port sont gratuits vers la France depuis le site de l'éditeur[^].

Tags  | 
 25 June 2008, 12:51
# Wednesday, May 28, 2008

1. La première étape de l'apprentissage de WPF, selon Josh Smith (un gourou de WPF), est la suivante : retirez votre cerveau de votre crâne, faites le tourner de 180°, puis remettez-le en place (voir Figure 1).

 

Avant d'apprendre WPF, retournez votre cerveau
Figure 1 : Prérequis avant d'apprendre WPF

Il est vrai que pour nous qui connaissons la programmation d'applications clientes "classiques" (type Win32, MFC, ou même Winforms), l'apprentissage de WPF provoque divers types d'émotions qui vont de l'étonnement à l'incompréhension, en passant par l'admiration ou la colère. La programmation WPF est... hmmm... comment dire... différente.

 


2. La deuxième étape est d'acheter un livre (celui que je préfère est celui d'Adam Nathan, aucun livre correct en français encore), de consulter la documentation de WPF sur MSDN, et de regarder des articles, tutoriels, vidéos sur CodeProject, sur des blogs, ou sur www.windowsclient.net. C'est un long processus : WPF est un environnement de programmation tout neuf, et tout est à découvrir ! Il y a tellement de nouveaux concepts à apprendre.

Comptez plusieurs semaines pour cette deuxième étape (pour la première étape, le délai peut être infini).

A l'issue de cette deuxième étape, vous savez comment faire des petits programmes qui mettent en oeuvre deux ou trois fonctionnalités de WPF. Vous savez créer une fenêtre avec un bouton 3D contenant une vidéo. Vous savez comment récupérer des images sur un site Web, et en afficher les miniatures. Vous pouvez même vous mettre rapidement à Silverlight, et porter votre petit bout de code sur le Web. Idéal pour épater vos collègues. Ajoutez en plus : "bah, j'ai fait ça en une soirée".

Mais mais mais... pas question encore de créer une application. A l'issue de cette deuxième étape, les fonctionnalités de WPF, c'est comme les débris de verre cassés chez un vitrier. Un par un il sont clairs, mais tous ensemble, ils sont opaques.

 


3. La troisième étape - délicate - est de tester chaque fonctionnalité de WPF dont on peut avoir besoin, dans une étude de faisabilité. Pour vérifier si :

  • elle fonctionne correctement, comme indiqué dans la documentation
  • elle est rapide (ou pas trop lente)

Il existe malheureusement encore des domaines mystérieux et inconnus de WPF. Ou d'autres lieux où il vaut mieux ne pas s'aventurer si l'on veut conserver des performances correctes. Tout ceci n'est écrit nulle part, et si vous ne le vérifiez pas, vous ne le saurez pas.

Oui, WPF est une technologie très jeune et très prometteuse, mais elle a les défauts (bugs) de sa jeunesse.

Un exemple parmi d'autres, les bitmapeffects sont parfois très lents et, par conséquent, souvent inutilisables. Mais dans le SP1 de .NET 3.5 (qui vient de sortir en béta), ces bitmapeffects ont été totalement réécrits pour profiter de l'accélération matérielle de la carte graphique. Ils sont devenus très rapides ! Surprise surprise...

 


4. La dernière étape est d'apprendre comment créer des application WPF. Imaginez que votre boss/client vous dise : "bon, ce nouveau projet, là, finalement on va le faire en WPF plutôt qu'en C++/MFC (ou Winforms, ou autre)".

Les MFC proposent nativement une architecture d'application document-vue. Elle a le mérite d'exister et de structurer le développement d'application. Avec WPF, s'élabore une structure similaire, l'architecture modèle-vue-machin. Machin ?!

(

Le premier livre sur les design patternsPetite parenthèse sur les design patterns, au cas où. Les design patterns (ou shemas ou patrons de conception en français... ah quelle drôle de langue que le français) ont été décris en 1995 dans un livre culte : "Design Patterns - elements of reusable software". Les design patterns sont d'excellents moyens de formaliser des problèmes classiques de conception de logiciels, et d'apporter une solution. Pourquoi réinventer la roue à chaque fois, alors que d'autres architectes logiciels, d'autres programmeurs, se sont déjà cassés les dents neurones sur des problèmes de conception de logiciel ?

Tout ça pour dire que, en 1995, à l'heure de gloire des MFC, on se passait de ces shemas. Mais maintenant il est impensable qu'un programmeurs, codeur, ou architecte logiciel ne se jette pas la tête la première dans ces patterns, avant de commencer quelque logiciel que ce soit.

Un excellent livre sur les design patterns, malheureusement épuisé en français

)

En 2005-2006, avant même la sortie de WPF, deux gars de chez Microsoft, John Gossman et Dan Crevier, se sont posé la question de savoir comment architecturer une application WPF. Ils ont inventé le pattern Model-View-ViewModel, qui est décrit sur le blog de John Gossman ici puis , ainsi que sur le blog de Dan Crevier. Plus récemment, Josh Smith a écrit une très bonne synthèse sur codeproject. Avec un brin de malice et de réalisme, le Dr WPF appelle ce pattern Model-View-Poo.

En gros, le pattern Model-View-ViewModel (Modèle-Vue-Machin) profite de la possibilité offerte par WPF de séparer facilement le code et les données d'une part, et l'interface utilisateur et l'affichage des données d'autre part. Ce pattern découpe une application en trois parties :

  • le modèle (Model) : les objets métiers, le code, les données, la logique et les algorithmes du programme. Le modèle est totalement indépendant de l'interface utilisateur, et de sa présentation à l'utilisateur.
  • la vue (View) : la présentation à l'utilisateur des données et des résultats des traitements. C'est l'interface utilisateur, et elle contient des fenêtres, des contrôles, ... Elle est complètement séparée du modèle.
  • le machin (ViewModel, ou Poo) : permet aux deux parties ci-dessus de communiquer. Un pont entre les deux mondes que sont le modèle et la vue. Le machin demande par exemple la mise à jour de l'affichage. Ou bien commande le démarrage d'un nouveau calcul, ou la mise à jour de données.

Bien que le machin (poo) qui relie le modèle et la vue ne soit pas toujours parfaitement décrit ni organisé, le but du shema Modèle-Vue-Truc est déviter que vos applications WPF ne ressemblent à ceci :

Code spaghetti

Pour aller au delà du simple shema modèle-vue-machin, Microsoft met au point une méthodologie de développement d'application WPF, appelée Prism. Une présentation du concept est effectuée par un membre de l'équipe de Prism. Des conseils, stratégies, design-patterns, exemples et guides font partie de ce kit de survie à l'usage des développeurs d'applications WPF. Ou plutôt des architectes WPF. Ces outils sont destinés à faciliter le développement d'applications WPF conséquentes. Prism n'est pas terminé, mais des préversions sont déjà disponibles sur codeplex. Il faut que je regarde ça de plus près.

Prism, méthodologie de développement WPF
Prism : méthodologie de développement WPF


On l'aura compris, la connaissance technique de WPF, de ses contrôles, styles, objets, etc, n'est que la première des étapes de l'apprentissage de WPF. Cette étape est bien décrite sur internet avec des tutoriels, des articles, des webcasts, etc. Il existe aussi de nombreux livres techniques (essentiellement en anglais).

Par contre, cela ne suffit pas pour créer et architecturer de vraies applications. Les shemas, les design patterns, les "guides de bonnes pratiques" sur la manière de combiner les éléments de WPF et construire des logiciels commencent à peine à pointer le bout de leur nez. Il reste encore beaucoup à faire dans ce domaine. La jeunesse de WPF (un an !) explique sans doute le manque de maturité dans ce domaine. A titre de comparaison, les MFC proposaient il y a 15 ans (!) une implémentation automatique du shema Document-Vue, avec un assistant qui générait le squelette de l'application selon ce design pattern. Ce shéma document-vue est un ancêtre du Modèle-Vue-Machin de WPF. Mais ce dernier est encore bien flou...

Bref, développer une application WPF, c'est un peu comme partir à la conquête du Far West il y a 150 ans. C'est une aventure.

 

Mise à jour : John Gossman (qui a géré le développement de Expression Blend en WPF) vient d'écrire un article intéressant sur le sujet : PresentationModel and WPF, dans lequel il écrit : "WPF is still so new that we still don't know all the best practices and techniques..."

Tags  | 
 28 May 2008, 23:42
# Monday, April 07, 2008

Sur un dossier skydrive (5 Go de stockage gratuit en ligne sur skydrive.live.com !), j'ai mis le runtime des MFC90 avec feature pack RTM, et des exemples compilés. Cliquez sur le dossier Skydrive ci-dessous pour télécharger le runtime MFC90 (un ZIP de 2,5 Mo contenant MFC90U.DLL, MSVCM90.DLL, etc.), puis les exemples (des ZIP de 150 Ko à 1 Mo contenant chacun un fichier EXE) .

J'ai aussi mis un exemple qui n'a pas besoin du runtime des MFC pour s'exécuter, puisque ce runtime est inclus statiquement dans le fichier EXE. Le fichier EXE est plus gros, forcément. Le ZIP fait 1,7 Mo, et contient un seul fichier EXE indépendant :

Pourquoi avoir mis quelques exemples en téléchargement ? Juste pour ceux qui n'auraient pas forcément Visual Studio, ou pas le temps d'installer le Feature Pack, mais qui auraient quand même envie de voir ce qu'on peut faire avec du bon vieux code C++ bien de chez nous crévindiou, et la toute dernière version des MFC.

Et de se dire : "wouah, c'est quand même vachement plus rapide qu'une appli .NET" :D

(au fait, WPF c'est Windows Pour les Fénéants ;), même si tout développeur est fénéant, par définition)

J'espère que le runtime MFC90-Feature pack que j'ai mis sur skydrive est complet, je n'ai pas fait passer tout ça par le service QA, désolé ;)

Voici une capture d'écran d'une des applications MFC90-Feature Pack mise sur le dossier Skydrive :

Entre parenthèse, pour ceux qui auraient déjà installé le feature-pack, les exemples livrés ont une configuration de compilation qui s'appelle "Debug CLR", et qui produit un exécutable qui utilise à la fois MFC90.DLL et MSCOREE.DLL. Et donc génère du code géré ?? Pas tout compris là... Si quelqu'un peut éclairer ma lanterne avant que je ne finisse par lire la doc...

Tags  | 
 7 April 2008, 23:34

C'est THE événement de l'année - que dis-je, du siècle - dans le monde du développement d'applications en C++ sous Windows.

Une mise à jour importante des MFC et des librairies C++ ! La doc de cette mise à jour est déjà sur MSDN (en anglais).

L'info est parue sur le blog de l'équipe VC++, et le téléchargement du C++ Feature Pack est ici. Ce téléchargement est gratuit (322 Mo), et pour Visual C++ standard, Pro ou Team System. Une version pour Visual C++ express sera bientôt disponible.

La fonctionnalité la plus spectaculaire offerte par ce Visual C++ Feature Pack est bien sûr le look and feel office 2007, y compris le ruban. Il se murmure sur les blogs que ce ruban d'Office serait appelé à être l'interface par défaut des applications sous Windows 7. C'est une rumeur... qui va dans le même sens que l'inclusion de ce ruban Office dans les MFC. Code natif ou code géré, même combat (pour une fois !)

La licence d'utilisation du ruban Office 2007

Notez que l'interface d'Office 2007 (le ruban, le design et le graphisme) sont protégés par Microsoft, et qu'il n'est possible de distribuer des applications qui utilisent cette interface qu'en obtenant une licence d'utilisation (gratuite) de l'interface Office 2007 ici : http://msdn.microsoft.com/officeui. Cette licence d'utilisation vous interdit d'utiliser l'interface d'Office 2007 pour faire un concurrent d'Office 2007 ;) et vous oblige à utiliser cette interface correctement. Dans ce cas, cette licence est gratuite et facile à obtenir.

D'ailleurs, cette licence "Office 2007 Fluent UI" est obligatoire pour toute application qui utilise l'interface d'Office 2007, que cette application soit écrite avec les MFC, ou bien avec une autre librairie qui offre le look and feel Office 2007.

La taille du runtime MFC a triplé

Voici les nouvelles versions des DLLs du runtime MFC, après installation du feature pack : MFC90.DLL, MFC90U.DLL. Elles sont dans C:\Windows\winsxs\x86_microsoft.vc90.mfc.....

Elles ont bien grossi après l'installation du feature pack. La version MFC 90 sans feature pack est trois fois plus petite :

Il faut aussi ajouter les DLLs du runtime C++, soit msvcr90.dll, msvcp90.dll et msvcm90.dll, pour 1,38 Mo. Sachez donc qu'avec le Feature Pack, une application MFC occupe au moins 5 Mo ! Evidemment de nos jours ce n'est pas forcément grand chose, mais moi qui ai connu les PC à 128 Ko de mémoire, imaginez un peu...

On note qu'on se retrouve avec deux versions très différentes des MFC qui s'appellent toutes les deux MFC90 :

- MFC90 livrée avec Visual Studio 2008, dont la taille est 1 Mo

- MFC90 du feature pack, dont la taille est 5 Mo

Hmmm, ça risque de poser des problèmes pour les installations ça...

Des exemples

Bon, on en a pour notre espace disque quand même. Tous les bitmaps du look Office 2007 qui mangent ces quelques Mo sur le disque sont bien agréables à l'oeil, n'est-ce pas ? Voici deux samples livrés avec le Feature pack.

Histoire de taper un peu sur .NET et surtout sur WPF, quel plaisir de voir des applications qui se lancent en une fraction de seconde, et qui sont très rapides à l'exécution !

 

Ces exemples sont téléchargeables sur mon espace skydrive.

Tags  | 
 7 April 2008, 15:37
# Sunday, February 24, 2008

Google m'envoie plein de demandes d'internautes qui recherchent comment charger une image PNG ou JPEG depuis les ressources d'un programme C++.

Mettre un bitmap BMP dans les ressources, et le charger en C++/MFC, c'est facile. Y mettre un PNG ou JPEG, c'est un tout petit peu délicat.

D'abord, ajouter l'image dans le fichier ressources :

IDB_IMAGEPNG PNG "res\\image.png"

Puis la charger dans le code :

// Load image data from PNG section of the resource file
HINSTANCE hResourceModule = AfxGetResourceHandle();
HRSRC hRes = FindResource(hResourceModule, 
         MAKEINTRESOURCE(IDB_IMAGEPNG), _T("PNG"));
DWORD dwSizeResource = SizeofResource(hResourceModule, hRes);
HGLOBAL hMem = LoadResource(hResourceModule, hRes);

// Copy the PNG image data into a new buffer
BYTE *pRes = (BYTE *)LockResource(hMem);
HGLOBAL hImg = GlobalAlloc(GHND, dwSizeResource);
BYTE *pImg = (BYTE *)GlobalLock(hImg);
memcpy_s(pImg, dwSizeResource, pRes, dwSizeResource);
GlobalUnlock(hImg);

// Create a GDIPlus Bitmap from a HGLOBAL
IStream *pStream = NULL;
HRESULT hr = CreateStreamOnHGlobal(hMem, FALSE, &pStream);
Bitmap *pBitmap = new
Bitmap(pStream);
pStream->Release ();
GlobalFree(hImg);

Ce code fonctionne avec les images JPEG et GIF aussi bien que les PNG.
Tags  | 
 24 February 2008, 18:47
# Thursday, January 17, 2008

 

Mise à jour du 7 avril 2008 : la version finale du feature pack est disponible !

 

J'ai installé la version béta du Service Pack Feature pack de Visual Studio 2008. 300 Mo, quand même...

Attention ! Ce Feature Pack ne s'installe que sur une version anglaise de Visual Studio Professional (ou +). Il faut aussi que le DVD d'installation de Visual Studio soit inséré dans le lecteur si vous n'avez pas fait une installation complète de Visual C++.

Le feature pack de Visual C++ contient une version de TR1 de C++0x, et la nouvelle version des MFC. Je vais parler ici des MFC seulement.

Les MFC à la diète !

Première chose, je regarde la taille de la DLL redistribuable des MFC : mfc90.dll passe de 1130 Ko à 3666 Ko une fois le Feature Pack installé. Ouch, ce n'est pas rien ! D'où vient l'accroissement de la taille ? Des quatre thèmes office 2007 inclus. Il y a environ 500 fichiers PNG dans mfc90.dll. Chaque fichier PNG existe en 4 versions, une pour chacun des quatre thèmes de Office 2007 : Aqua, Black, Blue, Silver.

C'est pratique d'avoir une seule DLL, mais ça serait peut-être bien de mettre les bitmaps des 4 thèmes Office dans 4 DLL différentes. Genre MFC91UXBLUE.DLL. Histoire d'économiser 2 Mo. Oui, oui, il y a quand même encore des gens qui regardent la taille des exécutables qu'ils produisent...

Là où c'est encore plus gênant, c'est quand on "linke" statiquement avec les MFC. Toutes les images des 4 thèmes Office se retrouvent dans le fichier EXE, même si on ne les utilise pas. Ca, c'est pas bien du tout ! Du coup, la moindre application avec les MFC liées statiquement fait presque 3 Mo. Si on ouvre l'exécutable généré dans Visual Studio pour voir les ressources, on obtient... ça :

J'espère que les MFC9.1 feront une petite diète avant de sortir en version finale... un petit régime avant l'été, ça serait sympa ?

Exemples d'interfaces utilisateur

Que peut-on faire avec ces nouvelles MFC ? Ah, ça déchire, comme disent les jeunes de maintenant. Voici quelques captures d'écran, pour le plaisir des yeux. Je vous propose en plus ces programmes en téléchargement, pour que vous puissiez apprécier la richesse de l'interface. J'avoue que l'aperçu avant impression de l'application MFC91Ribbon est pas mal, ainsi que le changement de style à la volée, et.... etc, etc.

Voici un exemple d'application C++/MFC avec un Ribbon :

 

Un autre exemple avec une interface genre Visual Studio, et "Diamond Docking" :

 

Vous pouvez télécharger ces deux applications ci-dessous, si vous voulez jouer avec (pour Windows Vista seulement). J'ajouterai d'autres exemples très bientôt. Enjoy !

MFC90samples.zip (2,46 MB)

Tags  | 
 17 January 2008, 18:46
# Saturday, January 12, 2008

Pourquoi Vista est il plus lent que XP ?

Devil Mountain Software a fait des tests pour comparer les deux versions de Windows, avec et sans Service Pack, selon Yahoo News. XP SP3 est toujours plus rapide que Vista SP1, jusqu'à deux fois plus rapide dans certains cas. Et Windows XP SP3 serait 10% plus rapide que XP SP2. Par contre, Vista SP1 ne serait pas vraiment plus rapide que Vista "normal".

"Vivement le SP3" direz-vous, si vous utilisez encore Windows XP. Eh bien vous l'avez déjà, ce SP3 ! Enfin, vous l'avez quasiment si vous utilisez les mises à jour de Windows Update. Car un Service Pack n'est rien d'autre que la compilation de tous les correctifs déjà parus.

Dans tous les cas Vista est plus lent que XP ! Eh bien c'est tout à fait normal. Les nouvelles versions des logiciels (y compris les systèmes d'exploitation) sont généralement plus lents que leurs prédécesseurs, car ils apportent leur lot de nouvelles fonctionnalités, gourmandes en ressources. Souvenez-vous de Visual C++ 6.0 qui compilait un programme à la vitesse de la lumière; Visual Studio 2008 est beaucoup plus lent. C'est ainsi que de nouveaux PC plus puissants sont vendus, qui font vendre de nouveaux logiciels, et réciproquement. Cela fait quelques dizaines d'années que ce serpent qui se mord la queue me permet (entre autres) de manger. Et sans doute vous aussi, avouez !

Vista a de nombreux gadgets et nouvelles fonctionnalités, dont certaines sont gourmandes en ressources. Par exemple, Windows Vista a beaucoup plus d'animations graphiques que XP. Activez l'affichage classique de Vista - sans Aero - et vous gagnerez beaucoup en performance. Aero consomme tellement de mémoire que je me demande si certains gadgets visuels ne sont pas écrits en WPF ! La gestion du réseau de Vista est très différente, la sécurité n'a rien à voir... autant de nouveautés qui coûtent.

Pourquoi (ne pas) migrer vers Vista ?

En fait, si on se pose la question de savoir si Vista est plus lent que XP, c'est que les utilisateurs manquent de raisons pour migrer vers Vista. Sinon on ne se poserait même pas la question. Même si 100 millions de PC ont déjà adopté Vista selon Bill Gates au CES, les utilisateurs migrent moins vite vers Vista qu'ils ont migré vers XP.

Ce qui fait migrer les utilisateurs moyens, et notamment en entreprise, c'est quand ils sont obligés d'avoir la dernière version de Windows pour faire tourner ce logiciel dont ils ont besoin.

Où sont les logiciels qui fonctionnent sous Vista et pas sous XP ? Bonne question. Il ne doit pas y en avoir beaucoup... Quel éditeur serait assez fou pour se priver de la moitié + de son marché ? Quand Adobe ne supportera plus XP, plus personne n'utilisera ce système.

WPF est-il mort ?

Pourtant, dans les conférences Microsoft, quand ils nous parlaient de Vista avant sa sortie, on avait droit à des démos d'impressionnantes applications WPF. Et on se disait : "Vivement Vista qu'on puisse faire des applis démentes". On avait hâte que Vista sorte pour pouvoir proposer des applications avec une interface utilisateur réellement nouvelle. Or ces applications ne sont pas sorties. Pourtant, les technos WPF sont disponibles depuis presque deux ans...

Pour l'instant, faire une application au look Vista, c'est :

  • utiliser la police de caractère Segoe UI à la place de Tahoma ou de MS Sans Serif.
  • avoir un champ "Recherche" bien en évidence.
  • utiliser des boîtes de dialogue type "Task dialog", et des assistants au style Aero.
  • reprendre les messages de l'interface utilisateur pour les mettre au goût de Vista.

Pas de quoi fouetter un chat. En plus tout cela est accessible sous XP, et même sous Windows 98 !

WPF est trop lent, trop lourd, et trop gourmand en mémoire. Et encore, il paraît que l'équipe Windows en a bien amélioré les performances et le temps de chargement des applications, avant la sortie de Vista. Est-il possible de construire une application grand public avec WPF, et de la vendre dans le commerce aujourd'hui ? Je demande à voir.

Pour la plupart de leurs applications, y compris pour le Ribbon d'Office, Microsoft utilise une sorte de mini-XAML en code non managé qui s'appelle DirectUI (recherchez sur google). Jamais WPF. Mais ne rêvez pas non plus : DirectUI ne sera jamais disponible au commun des développeurs, car DirectUI est un produit à usage interne, pas suffisamment propre pour que Microsoft puisse le vendre et en assurer le support pendant 10 ans. C'est d'ailleurs pour cette raison que Microsoft a préféré acheter le code source d'un Ribbon à BCGSoft pour l'inclure dans les MFC, plutôt que de publier le leur.

WPF est-il déjà mort ? En fait, WPF est une version 1.0. WPF 2.0 sera - espérons le - plus rapide et moins gourmand : c'est à dire écrit en code natif ! Sinon, nous autres éditeurs d'applications, l'enterrerons dans le même cimetière que le langage Java.

WPF ou Silverlight ?

En attendant que WPF ne sorte un pied de la tombe (ou bien qu'il y mette les deux), Silverlight pointe le bout de son nez. Avant sa sortie officielle, Silverlight s'appelait WPF/Everywhere, souvenez-vous. Silverlight 2.0 (en alpha actuellement) sera une implémentation légère, rapide et compacte d'une partie de WPF.

Comment ? Microsoft aurait implémenté deux fois le support de WPF ? Oui : une fois de manière lente et non optimisée (en code "managed"), et une fois de manière légère et rapide (en code natif). C'est ça Silverlight : un redoutable concurrent de WPF.

Et, pour en revenir à Windows XP, Silverlight tourne bien sûr sous XP...

Cela en fait des modèles de programmation, je choisis lequel pour mes applications ?

Pour faire une application sous Windows, on peut utiliser :

  • L'API Windows native (Win32), généralement à travers les MFC ou les ATL. La technologie est ancienne, éprouvée, rapide, mais les programmeurs d'aujourd'hui ne veulent plus coder en C++, ils préfèrent .NET... ! Si vous codez en C++, demandez une augmentation à votre chef, vous le valez bien.
  • Windows Forms (.NET 1.0 à 2.0) : cette technologie fonctionne très bien pour les applications de gestion, les application d'entreprise, et également pour les petits logiciels qui mettent en forme le contenu d'une base de données (genre "1000 courriers types" ou "mes recettes de cuisine").
  • Silverlight : c'est WPF allégé, écrit en code natif, et donc rapide. Mais Silverlight 1.0 est trop limité (à mon avis), et Silverlight 2.0 encore en version alpha. Silverlight arrivera-t'il trop tard ? Silverlight est apparemment destiné à des applications internet à client riche (RIA), mais il est possible de l'utiliser dans une application classique. Et gageons que les évolutions futures rendront Silverlight plus polyvalent.
  • WPF : très complet, très puissant, trop lourd, trop gourmand. Il faudrait (faudra) qu'il soit réécrit en code natif. Vivement WPF 2.0.

En regardant la liste, c'est marrant, on voit tout de suite qu'il y en a un environnement de trop, entre WPF et Silverlight. Ces deux environnements sont deux implémentations très différentes d'un seul type d'application (XAML/C#). Microsoft a développé deux fois la même chose on dirait.

Depuis quelques mois, on dirait que Microsoft a redécouvert qu'ils pouvaient proposer des outils pour développer des applications en code natif. Les nouvelles MFC sont un exemple. Est-ce que la trop grande lourdeur de WPF leur a montré qu'ils étaient allés trop loin dans le tout "managed" ?

Bon, qui vivra verra. En attendant, de nombreux utilisateurs restent sous XP. Microsoft s'en fiche, ils ont payé leur licence Windows. Et les éditeurs n'osent pas encore sortir des applications spécifiques Vista.

 

Tags  |  |  | 
 12 January 2008, 23:32
# Tuesday, January 08, 2008

J'ai déjà parlé de cette nouvelle version, ici ou , elle est maintenant disponible en version beta. C'est annoncé sur le blog de l'équipe de Visual C++. Le téléchargement (en anglais) est sur le site MSDN. Si vous voulez juste lire la documentation, c'est ici.

La version béta des nouvelles MFC n'est pas encore disponible pour Visual C++ Express, mais cela viendra.

Quoi de neuf (selon le blog de l'équipe Visual C++) :

  • Le ruban office 2007
  • Le look and feel d'Office 2007, 2003 ou XP, au choix.
  • Les panneaux attachables (docking panes... on comprend mieux en anglais !), comme dans Visual Studio
  • Barres d'outils et menu paramétrables
  • De nouveaux contrôles avancés
  • Gestion des applications MDI avancée : onglets, ...

De plus, cette version des MFC inclut une implémentation de TR1. L'implémentation de TR1 est un pas vers l'adoption du standard C++0x. J'ai déjà parlé de C+=2 C++0x ici. L'implémentation TR1 proposée dans les MFC comprend :

  • Pointeurs intelligents (smart pointers)
  • Expression régulières.
  • Nouveaux types conteneurs : tuples, tableaux, ensembles non ordonnés, etc.
  • Générateur de nombres aléatoires avancé
  • Encapsulateurs de fonction polymorphique (polymorphic function wrapper)
  • Type traits
  • et d'autres.

Je n'ai pas tout compris à TR1 encore, mais ça a l'air pas mal :)

Bon allez, au boulot !

Tags  | 
 8 January 2008, 12:52
# Saturday, January 05, 2008

Oui, nous sommes en 2008 et la newsletter hebdomadaire "Microsoft download notification" du 4 janvier 2008 indique qu'il faut télécharger le SP2 de Windows Vista XP. Cette lettre d'information présente l'actualité des téléchargements Microsoft. Télécharger le SP2 de Windows XP est donc d'actualité, dixit Microsoft.

Microsoft aurait-il entendu les utilisateurs se plaindre que Windows Vista est trop lent ? Comme dans la lettre d'information de CNET du 4 janvier 2008 : "What can I do to improve the speed of my Vista machine ?" Un sondage (non représentatif) sur ce même site indique que 49% des utilisateurs ne veulent pas migrer de XP à Vista.

Les utilisateurs de PC en auraient-ils assez des fatwares : systèmes et des logiciels trop lents, trop gourmands en ressources ?

Est-ce que Bill Gates parlera de la difficulté à faire adopter Vista pas les utilisateurs de Windows XP, lors de son discours d'ouverture du CES, dimanche 6 janvier ? Je pense que oui. Enfin, il parlera du SP1 de Windows Vista. Il devrait aussi, dit-on, annoncer des nouveautés concernant Windows Mobile, Media Center, Home Server, XBOX 360, et Zune. Au fait, le site événementiel de Microsoft pour le CES est tout en silverlight... très joli design.

La difficulté de voir Vista être adopté par les utilisateurs de XP est un point que nous, éditeurs ou créateurs de logiciels, devons prendre en compte. Il y a un an, on pouvait se dire : "j'ai un nouveau développement, je le démarre en .NET 3.5, Vista sera adopté dans un an par tout le monde". Un an plus tard, Vista n'a pas envahi les PC. .NET 3.5 ne fonctionne pas très bien sous XP, qui reste une cible très importante pour nos logiciels. Les utilisateur ne veulent pas de fatware. Le C++ a encore un bel avenir.

 

Tags  | 
 5 January 2008, 15:25
# Wednesday, December 26, 2007

Codejock est l'éditeur de la librairie de classe MFC eXtreme Toolkit Pro. C'est le concurrent de BCG Soft, dont la technologie a été achetée par Microsoft pour être incluse dans la prochaine version de MFC.

Codejock est en train de développer une fonctionnalité assez étonnante : le support d'une partie de XAML en C++ natif. Noooon ?? Si !

C'est vrai après tout ! XAML est le langage de description d'interface de .NET 3.5 (WPF). Mais pourquoi être obligé d'utiliser .NET pour faire du XAML ? C'est la question que Codejock s'est posée. Du coup, nous allons bientôt avoir droit à une implémentation de XAML en C++ natif.

Hum, ça veut dire quoi "une implémentation de XAML en C++ natif" ? Eh bien tout simplement que nous aussi, développeurs C++/MFC, pourrons bientôt utiliser XAML et Expression Blend pour coder nos interfaces. Je dois avouer que j'enviais énormément ce privilège aux développeurs C# .NET 3.5.

Quel intérêt ? Développer des interfaces utilisateurs très sympa, sans s'encombrer de la lourdeur de WPF. Je ne sais pas si vous avez déjà lancé une application écrite en XAML pour WPF, mais c'est loooonnng à se lancer, et ça nécessite énormément de mémoire. Et WPF sous Windows XP, ce n'est pas tout à fait ça (à moins que quelqu'un ne me contredise...)

Voici quelques exemples d'interfaces écrite en XAML :

L'exemple ci-dessus est écrit entièrement en XAML (le code XAML est ici (12 Ko)). Ce code XAML peut au choix être utilisé avec WPF pour faire une application en code managé et WPF, ou alors être utilisé par le module XAML de Codejock pour faire une application C++ natif.

Ci-dessus, du code XAML est utilisé pour créer des contrôles dans une application C++/MFC. On reconnaît la listbox multi-ligne, multi-format : une spécialité de XAML et WPF !

Cette fonctionnalité de Codejock ne supportera pas tout XAML, du moins dans la première version ;). Je ne sais pas quand cela sera disponible, mais à vue de nez... sans doute en même temps que les nouvelles MFC !

En tous cas, le rachat d'une partie de la librairie de BCG Soft par Microsoft a pour effet de dynamiser le développement C++ ! Vivement la suite !

 

Tags  |  | 
 26 December 2007, 18:45
# Thursday, December 13, 2007

Les TechDays, c'est la grand-messe annuelle à Paris, où Microsoft nous présente pendant 3 jours les nouvelles technos de développement liées à Windows. Un événement d'autant plus incontournable qu'il est gratuit et ouvert à tous ceux qui s'intéressent au développement d'applications (et qu'il y a à manger :-p).

Grande première pour la prochaine édition : il y aura une session sur Visual C++ ! Microsoft associe à nouveau "Nouvelles technologies" et "C++".

Les nouveautés de Visual C++ 2008 animé par Eric Mittelette, Eric Vernié
Le lundi 11 février 2008, 11:00 - 12:00.

Une session consacrée aux nouveautés de Visual C++ 2008, à la fois pour le développeur C++ Natif, et pour le développeur C++/CLI (C++ qui cible .NET). Venez découvrir les nouvelles bibliothèques STL/CLR et marshalAs, qui font de C++/CLI, LE langage d'intéropérabilité entre le monde natif (Win32) et le monde .NET. Mais les développeurs natifs ne seront pas en reste, car une surprise les attend avec les nouvelles bibliothèques MFC.

La session sera dense : une heure pour présenter les nouveautés C++/CLI et MFC !

Pour tout savoir sur les Techdays 2008 et s'inscrire gratuitement, rendez-vous sur :

Retrouvez-moi aux Microsoft TechDays 2008

Tags  | 
 13 December 2007, 12:41
# Wednesday, November 28, 2007

Le site MSDN, c'est un peu comme le Musée du Louvre : même en y revenant plusieurs fois, on y trouve toujours quelque chose qu'on n'avait pas remarqué avant.

La page "How do I ?" Videos for Native Code contient une cinquantaine de vidéos (en anglais) de 15 à 20 minutes. S'il y a quelques sujets sur l'interopérabilité code natif/code managé, la plupart des vidéos concernent exclusivement le code natif C++. Le niveau va de l'initiation, à des sujets plus avancés comme le debogage distant ou encore l'utilisation du Kernel Transaction Manager de Vista !

 

Et pendant que je suis sur le site MSDN, un petit clin d'oeil. Comparez les trois pages ci-dessous. Il y en a une qui est à jour, les autres pas encore ;-) :

http://msdn2.microsoft.com/en-us/vstudio/default.aspx (page du site MSDN américain)
http://msdn2.microsoft.com/en-gb/vstudio/default.aspx (la même page, sur le site anglais UK)
http://msdn2.microsoft.com/fr-fr/vstudio/default.aspx (la même page, en français)

 

Tags  |  | 
 28 November 2007, 01:20

Une vidéo de 46 minutes sur channel 9 nous fait découvrir que C++ en tant que langage non managé existe, et continuera d'exister. La plate-forme C++/MFC, bien que quasiment non mise à jour depuis 6 à 8 ans, a toujours des utilisateurs. Microsoft commence (?) à entendre que C++/MFC ne peut pas forcément être remplacé par C++ managé ou C#/VB.

Steve Teixeira (Visual C++ manager) fait part de ses commentaires sur la sortie de la prochaine version des MFC/TR1 dans quelques mois. La plate forme C++/MFC continuera à évoluer indépendamment de la plate-forme .NET. Ouf !

Steve Teixeira au TechEd Barcelone
Steve Teixeira au TechEd de Barcelone

Au fait, Channel 9 utilise un player vidéo écrit en Silverlight... alors que ce site utilise un peu de F###H, désolé...;)

Justement, demain je me mets à Silverlight. Il y a une présentation de Silverlight à Paris. Quand j'aurai un moment je remplacerai mon animation F###H en haut de page par une animation Silverlight.

Voir la vidéo
Ecouter le podcast (MP3)
Ecouter le podcast(WMA)
Telecharger la Vidéo

Tags  |  | 
 28 November 2007, 00:28
# Wednesday, November 21, 2007

Ca y est, j'ai installé VS2008 et migré le projet C++ sur lequel je travaille.

Ce projet C++ est un projet moyen (40.000 lignes de C++). C'est une application d'imagerie médicale destinée à des chirurgiens, pour leur permettre de travailler avec leurs images au format spécifique Dicom. Ce projet utilise la bibliothèque Codejock, ainsi que les librairies OpenJpeg (jpeg2000), LibTiff, Jpeg Group.

L'installation de VS2008 est trèèèès longue. Elle dure plusieurs heures (plus d'une demi-journée). Faut dire qu'il y en a des composants .NET à installer ! Ne faites pas comme moi, ne l'installez pas un mardi, le jour des patches de Vista (patch tuesday), pour ne pas avoir à rebooter au milieu de l'installation ;). Lancez l'installation un soir, ce sera bon pour le lendemain matin.

Sous Vista x64, tout s'est bien passé. Pour l'instant je garde VS2005 et VS2008. Je n'avais pas installé de béta de VS2008 sur ce PC. D'après Scottgu, il faut désinstaller soigneusement une béta de VS2008 avant d'installer la version finale, et ça n'a pas l'air très simple.

Deuxième étape pour moi : compiler la librairie Codejock (xTreme Toolkit pro) avec VS2008. Là encore, tout se passe bien avec la dernière version (11.2.1), le programme d'installation de Codejock fait ça tout seul pour VS2008. Comme quoi ils sont bien chez Codejock : leur librairie fonctionne impeccablement sous VS2008. Il avaient sans doute anticipé avec les versions béta de VS2008. C'est dans ces cas là qu'on distingue les pros.

Lorsque j'ouvre mon projet C++/MFC sous VS2008, l'assistant de conversion de projet ne pose pas de problème. Je récupère bien mes environnements. La compilation du projet (en Unicode) se fait également sans problème, et le logiciel fonctionne.

Bon, je suis quand même surpris, ça s'est passé tout seul. Je ne sais pas si le compilateur a été modifié. Lors de la sortie de VS2005, le compilateur avait été modifié. La migration avait été plus longue. Il avait fallu modifier le code à plusieurs endroits. Là, non.

Résultat : en passant de VS2005 à VS2008, la taille du binaire diminue de 50 Ko (sur 3,4 Mo). Le temps de compilation diminue de 10 secondes (moyenne de 2"59 à 2"48).

Pour un utilisateur C++, pas grand chose ne change, donc. Ce qui est quand même une bonne nouvelle : la migration est facile. Ah si, j'ai quand même l'impression que l'IDE est un peu plus rapide. Je n'ai plus observé ces blocages assez fréquents avec VS2005.

Est-ce qu'il faut migrer votre projet C++ natif vers VS2008 ? Ma foi, si vous êtes abonné à MSDN et que vous avez VS2008, faites-le : ça a l'air de bien fonctionner. Mais si vous ne faites que du C++ natif, vous ne verrez pas beaucoup de différence entre VS2005 et VS2008. En attendant la nouvelle version des MFC et des librairies C++ dans quelques mois.

 

Tags  | 
 21 November 2007, 17:52
# Monday, November 19, 2007

Toute la famille des produits Visual Studio 2008 (Express, Professional, Team Suite) est disponible ici, y compris les versions gratuites, ou bien sur le site MSDN pour les abonnés.

A cette occasion, une vidéo très intéressante a été postée sur channel9 : une interview de S. Somasegar (Developer Division VP), Jeff Beehler (mon ex-boss et actuellement VS Team System manager), et Carol Grojean (program manager of VS2008 & .NET 3.5).

Dans cette vidéo, Soma annonce que pour nous, adeptes du C++, il faudra attendre 2 mois pour obtenir une béta de la nouvelle version des MFC et de C++ TR1. Rendez-vous donc au mois de janvier pour que Visual Studio 2008 devienne -enfin- un outil pour les "vrais" programmeurs ;). Car, si la plupart des nouveautés de VS2008 concernent le code managé (et notamment la révolution LINQ), la plupart des développeurs chez Microsoft programment en C++. Si, si ! C'est le grand chef qui le déclare.

Plein d'autres choses intéressantes dans cette vidéo...

Pour la liste des nouvelles fonctionnalités, voir l'article de Scottgu, ou celui de Jeff Beehler pour VSTS.

Et pour ceux qui voudraient avoir de la conversation dans les salons pendant les pauses des conférences Microsoft, j'ai vu sur le blog de Redo un lien vers un .NET Framework 3.5 Training Kit qui a l'air très intéressant...

Tags  | 
 19 November 2007, 19:32
# Wednesday, November 14, 2007

Comparaison n'est pas raison. Mais quand même...

Prenons trois petits programmes :

- Une application de gestion de comptes bancaires (Votre Budget) écrite en C++/MFC avec la librairie BCGSoft, linkée statiquement avec MFC et BCG (oui, la librairie qui va être intégrée dans la prochaine version des MFC)

- Un petit freeware écrit en VB.NET qui aide à arrêter de fumer, StopClope. On entre la date à laquelle on arrête de fumer, et puis on obtient des récompenses en fonction du nombre de jours qu'on tient sans fumer. Par exemple, j'ai arrêté il y a 101 jours, économisé 707 euros, et j'ai gagné 19 jours d'espérance de vie. Motivant non ?

- Une application WPF, LCI Intégrale qui affiche des vidéos en streaming.

Voici à quoi ressemble mon gestionnaire des tâches Vista quand je lance ces trois programmes en même temps :

Mémoire occupée par les trois applications :

- C++/MFC/BCG : 5 Mo (13 Mo)

- Winform : 15 Mo (28 Mo)

- WPF : 64 Mo (145 Mo)

A vue de nez, une application WPF occuperait 4 fois plus de mémoire qu'une application Windows Forms, et 12 fois plus qu'une application MFC/BCG.

Ces trois programmes sont des petites applications, mais les valeurs ne varient pas énormément. Pour donner un ordre de grandeur, j'ai aussi lancé Word 2007 (22 Mo), Photoshop (65 Mo), et Visual Studio (50 Mo).

Le confort ressenti à l'utilisation de ces applications est directement proportionnel à l'espace mémoire utilisé. Photoshop et Visual Studio sont lourds à utiliser, n'est-ce pas ?

Ah ! Quel plaisir d'utiliser des logiciels écrits en C++ ! Alors faites plaisir à vos clients, programmez en C++ !

Tags  |  | 
 14 November 2007, 00:48
# Sunday, November 11, 2007

C'est officiel, une grande partie des nouveautés de la nouvelle version des MFC incluse dans Visual Studio 2008 ne sera pas (entièrement) développée par Microsoft, mais a d'ores et déjà été rachetée à la société russe BCGSoft. Il s'agit du produit BCG Controlbar Pro. Pour avoir une idée précise des nouveautés à venir, il suffit d'aller sur la page www.bcgsoft.com/FeatureTour/bcgcontrolbar-tour.htm, il y a de nombreuses captures d'écran.

J'ai déjà personnellement utilisé BCG Controlbar Pro pour créer différents produits C++/MFC/BCG depuis 2002, et j'ai été très satisfait du résultat. L'utilisation de BCG Controlbar dans une application MFC est relativement simple à mettre en oeuvre, la migration des applications existantes ne devrait pas poser de gros problème. Depuis 2004 j'ai aussi utilisé le concurrent direct, la librairie Codejock (www.codejock.com), plus complète et aussi un peu plus complexe à utiliser.

Avant que d'ici 6 mois environ, nous puissions disposer de la nouvelle version des MFC, il est déjà possible de télécharger une version d'évaluation de BCG ControlBar ici : www.bcgsoft.com/bcgcontrolbar-download.htm.

Que vont devenir les deux frères ennemis BCGSoft et Codejock, maintenant que leurs technologies sont "gratuites" avec Visual C++ ? BCGSoft propose aussi d'autres produits pour .NET, et Codejock... ?

Pour illustrer concrètement cette nouvelle étape des MFC, voici deux captures d'écran de l'exemple de code C++/MFC Drawcli qui est livré avec Visual C++ depuis longtemps... Le voici relooké ! Avant - Après. Sans commentaire !

Tags  | 
 11 November 2007, 22:10
# Saturday, November 10, 2007

Aujourd'hui j'ai lu sur le blog de S. Somasegar que les MFC allaient subir une évolution conséquente l'année prochaine ! S. Somasegar est Corporate Vice President, Developer Division de Microsoft.

Après avoir participé au développement de Visual C++ 1.0, 1.5 et 2.0 en 1991/1992 avec Jeff Beehler et Olivier Ezratty, j'utilise les MFC depuis 15 ans pour (faire) développer de nombreux logiciels. Mais force est de constater que depuis 6-7 ans, les MFC n'évoluent (presque) plus, et que Microsoft ne communique auprès des développeurs qu'autour du code managé. Pourtant, on ne fait pas avec C#/.NET la même chose qu'en C++/MFC ! L'annonce d'une vraie nouvelle version des MFC est à mon avis un évenement réellement très important pour la communauté des développeurs Microsoft. Enfin, au moins ceux qui trouvent que, quand même, .net c'est facile à utiliser mais c'est pas ça.

Pour fêter ça, voilà, je crée un blog tout neuf !

 

Tags  | 
 10 November 2007, 21:43

Lu sur le blog de S. Somasegar :

" En aout, j'ai écrit un message early thinking on Visual C++ post Orcas. L'équipe C++ et moi avons eu beaucoup de retours très intéressants. Merci.

L'équipe C++ examine ces retours, et finalise les directions dans lesquelles nous devons orienter l'évolution de Visual C++. L'une des premières directions est un investissement dans des librairies écrites en code natif. L'équipe travaille sur une mise à jour significative des Microsoft Foundation Classes (MFC). Nous la livrerons au cours du premier semestre 2008 comme une mise à jour de Visual Studio 2008. Nous en aurons un aperçu au début de l'année prochaine.

Avec cette mise à jour des MFC, les développeurs pourront créer des applications avec le "look and feel" de Microsoft Office, Internet Explorer et Visual Studio. Les nouvelles fonctionnalités vont inclure le "ribbon" d'Office 2007, le look d'Internet Explorer avec ses "rebars" et "task panes", le look de Visual Studio avec sa fonctionnalité d'ancrage (docking) sophistiqué, les fenêtres qui se masquent automatiquement (auto-hide), les grilles de propriétés (property grid), et tout ce qui va avec. Vos utilisateurs pourront aussi paramétrer les menus et barres d'outils de vos application en utilisant le glisser déplacer (live drag and drop).

De plus, nous allons aussi supporter TR1. TR1 est la première évolution de la librairie standard C++. Notre implémentation de TR1 inclus des fonctionnalités importantes comme les pointeurs intelligents (smart pointers), les expressions régulières, de nouveaux conteneurs (tuple, tableaux, ensembles non ordonnés, etc.), un générateur de nombres aléatoires sphistiqué, des encapsulations de fonctions polymorphiques, les "type traits", et d'autres.

Rendez-vous au début de l'année prochaine pour de plus amples informations. En attendant, vous pouvez lire le blog de l'équipe C++. Vous pouvez aussi regarder la vidéo de channel 9 sur les nouvelles librairies MFC."

Quelle révolution après des années d'overdose de code managé. Microsoft se s'aperçoit enfin qu'ils n'ont pas (encore) tué tous les développeurs C++/MFC !

Précisions :

  • une version béta des nouvelles MFC sera dispo début 2008. La version finale au printemps (entre le 21 mars et le 21 juin !)
  • C++ TR1, "Technical Report 1", ce sont de nouvelles classes qui viennent enrichir la librairie standard C++. C++ TR1 n'est pas spécifique à Windows, est disponible sous d'autres systèmes d'exploitation, et supporté par d'autres compilateurs que VS. Il s'agit d'une étape importante vers l'implémentation dans VS2008 de la nouvelle version de C++, qui ne s'appelle pas C+=2, mais C++0x. J'y reviendrai très bientôt.

 

Tags  | 
 10 November 2007, 21:15