# 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

Le grand Scott Guthrie (dont la lecture du blog est de plus en plus incontournable) nous fait baver en donnant des détails sur Silverlight 2, et même un tutoriel (d'autres infos ici aussi, et en français sur le blog de ClaueR)... alors que tout cela n'est même pas encore disponible en béta : il faudra attendre la conférence MIX 08, dans deux semaines, pour tester Silverlight 2 (en béta).

Moi aussi je vais faire du teasing à la Scott Guthrie. Dans deux semaines, la jolie demoiselle ci-dessous va enlever le haut, sur ce blog, ici même ! Et moi aussi j'enlèverai le haut (du blog) : je remplacerai la petite animation Flash par une animation Silverlight 2.


Image © parazit - Fotolia.com

Tags  | 
 24 February 2008, 15:29
# Tuesday, February 19, 2008

Il y a un peu plus d'un mois je râlais contre WPF, parce qu'il est trop lourd, trop gros, trop lent. Parce qu'il fallait trois jours pour lancer une application WPF (OK j'exagère un peu). J'allais jusqu'à dire que si bien peu d'applications WPF sont disponibles, c'est principalement à cause de ses mauvaises performances. Même si ce n'est pas la seule raison : WPF et XAML représentent une nouvelle façon de programmer qu'il faut un moment à assimiler.

J'étais prêt à jeter à la poubelle mon bouquin Windows Presentation Foundation Unleashed, persuadé que WPF signifie secrètement Windows Pour les Fénéants.

Alleluia !

Scott Guthrie (qui vient d'être promu Corporate Vice President de Microsoft, en charge de .NET, CLR, WPF, Silverlight, ASP.NET, IIS ...) annonce aujourd'hui une amélioration des performances de .NET, et particulièrement de WPF, et une nouvelle version importante de WPF pour cet été. Peut-être une synergie avec Silverlight 2.0 ?

WPF était une nouveauté de .NET 3.0, et quelques améliorations ont été apportées à WPF avec la sortie de .NET 3.5. Cet été, une nouvelle version de WPF sera disponible.

Cette nouvelle version proposera une installation du framework .NET optimisée, un chargement des applications .NET plus rapide, un affichage du texte et des vidéos plus rapide en WPF, etc. Tout cela sans avoir à modifier les applications existantes. Outre des performances améliorées, WPF 3.5 comportera de nouveaux contrôles qui manquent cruellement : un calendrier (enfin !), un Ribbon (comme Office 2007), et un DataGrid. Visual Studio 2008 disposera aussi d'une meilleure intégration de WPF.


Le Datagrid de xceed.com. Bientôt dans WPF ?

Microsoft est - enfin ! - concerné par la performance des applications réalisées avec Visual Studio : de nouvelles MFC, une version optimisée de WPF... Mieux vaut tard que jamais ! ;)

J'en conclus que le moment est venu de se mettre sérieusement à XAML. Oui, oui, même pour toi, programmeur C++/MFC. L'interface utilisateur de ton programme risque d'être en WPF l'an prochain. Même si tu devras encore gérer des DLL en C++ pour quelques années encore.

Nous en saurons plus dans deux semaines : Rob Relyea, qui a réalisé une excellente présentation de WPF pour les développeurs à la conférence MIX l'an dernier, décrira le futur de WPF dans une session du MIX 08.

Tags  | 
 19 February 2008, 22:34
# Monday, February 18, 2008

Pendant des siècles on s'est demandé ce que signifient nos rêves. Freud et d'autres ont essayé d'en saisir la signification. En fait, les rêves, ce sont juste nos cerveaux qui se défragmentent pendant la nuit.

Dreams are really just our brains defragmenting overnight

(de steve clayton)

Tags
 18 February 2008, 16:11
# Friday, February 15, 2008

Comme quoi j'étais mauvaise langue il y a quelques jours : la copie a pris moins de 30 jours ;)

En fait, Microsoft a avancé la disponibilité sur MSDN et Technet pour permettre aux éditeurs de logiciel et intégrateurs de tester le SP1 avant sa sortie au grand public, dans un mois. Abonnés MSDN et Technet ont râlé, Microsoft a donné satisfaction.

On dit que ce SP1 rend Vista plus rapide... de manière impressionnante parfois. Notamment la copie de fichiers ;) selon ZDNet.

Pour les abonnés MSDN, c'est ici : http://msdn2.microsoft.com/en-us/subscriptions/default.aspx, dans la rubrique "Top download", en français, anglais, pour x64 et x86. Aussi dispo pour les abonnés Technet Plus.

Je me demande si les performance des applications WPF vont être améliorées. Parce que faire des applications avec WPF est vraiment tentant quand même... Je rêve là, non ?

Si l'installation de "la bête" prend plus d'une heure, elle est très simple : il suffit d'exécuter la bonne version du SP1 (x86 ou x64). Pour l'image ISO, même pas besoin de la graver sur un DVD, un simple lecteur virtuel suffit. Ensuite tout est automatique, heureusement. L'installateur détecte tout seul la langue du système. Pas de problème sur les quelques PC sur lesquels il a été installé.

 

Après installation, la version de Windows est toujours 6.0, le numéro de build est 6001.

On peut tester par programme si le SP1 de Vista est installé (en C++ natif) :

OSVERSIONINFOEX osvi;
memset(&osvi, 0,
sizeof(osvi));
osvi.dwOSVersionInfoSize =
sizeof
(osvi);

if
(GetVersionEx((OSVERSIONINFO*)&osvi))
{
      
if
(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)  // Windows 6.0
      {
            // Vista 6.0

            if (osvi.wServicePackMajor == 1) // Service pack version 1
            {
               
// Vista SP1
            }

      
}
}

Voici ce que contient toute la structure OSVERSIONINFOEX sous Vista SP1 :

Le nom "Service Pack 1" est en clair dans szCSDVersion, et le numéro de version du Service Pack est 1.0.

Pour rappel, voici les numéros des différentes versions de Windows :

Operating system Version number
Windows Server 2008 6.0
Windows Vista 6.0
Windows Server 2003 R2 5.2
Windows Server 2003 5.2
Windows XP 5.1
Windows 2000 5.0
Windows Me 4.90
Windows 98 4.10
Windows NT 4.0 4.0
Windows 95 4.0

On notera que Vista a le même numéro de version que Windows Server 2008...

Bon allez hop, au boulot ! Testons si nos logiciels fonctionnent toujours avec ce SP1. Parce qu'il sera disponible au grand public dans un mois exactement. Les services QA/tests ne vont pas pouvoir partir au ski...

Tags  | 
 15 February 2008, 15:31
# Tuesday, February 05, 2008

Sur le blog de Windows Vista, Mike Nash (Microsoft Vice President, Windows Product Management) a annoncé que le SP1 de Vista était sorti en RTM... mais qu'il ne serait disponible sur Windows Update qu'en mars et avril 2008. Quand un produit sort en RTM (Release To Manufacturer), ça veut dire qu'il est fini, qu'il part à la fabrication, au pressage des DVDs, qu'il est mis en ligne en téléchargement, qu'il sort en RTW (Release to Web !). Alors, bizarre ce délai, non ?

Bon, bon... attendons un peu : Mike Nash nous promet que le SP1 améliore la rapidité de copie des fichiers sur le réseau jusqu'à 50%. Ce SP1 pourra être installé sur la plupart des PC Vista, sauf ceux qui ont des drivers incompatibles. Sur ces machines, le SP1 ne s'installera pas.

La voilà la vraie raison ! Selon www.istartedsomething.com, le PC Vista qui copie les fichiers du SP1 sur les serveurs de Windows Update a des drivers réseau pas très catholiques. Du coup, le SP1 n'a pas pu être installé sur ce PC, qui conserve son problème de lenteur lors de la copie de fichiers sur le réseau.

Criant de vérité, non ?

Tags  | 
 5 February 2008, 10:36