On ne va pas se mentir, Win32 et ses callback, ce n'est pas franchement la partie qui m'avait tenté le plus dans la Bible du PC, mais en même temps, le fait que chaque "widget" soit adressable séparément et qu'on puisse par un petit script python retrouver sa fenêtre, cocher la case qui dit "jumbo" et cliquer sur "OK", ça a un côté séduisant ... Là où c'est beaucoup moins séduisant, c'est quand on voit qu'il va falloir appeler CreateFont() à gauche et à droite, passer des coordonnées et des tailles à tout bout de champ, appeler SendMessage() aux objets qu'on vient de construire pour appliquer le changement de police ... Puis ça devient vraiment pénible avec WS_TABSTOP qu'il va falloir ajouter partout pour pouvoir naviguer entre les contrôles de la fenêtre tout au clavier.
Puis est venu le coup de grâce: si on veut éviter que le titre ne déborde de sa barre, si on veut que les contrôles tiennent dans la fenêtre, on doit surveiller les tailles des différents objets créés ... GetTextExtentPoint32(hdc, text.c_str(), text.length(), &size);, ce n'est déjà pas très sexy, mais il faudra l'emballer avec 4 lignes de code supplémentaires rien que pour connaître la longueur d'une chaine en pixels ... oh, pas que ç'ait été plus simple avec freetype, celà dit. Mais quand on pense qu'on y est, on essaie d'ajouter un SetWindowsPos(..., SWP_NOOWNERZORDER|SWP_NOZORDER) pour pouvoir faire défiler la fenêtre dans le cas où il y aurait plus de cases à cocher que prévu ... et on voit qu'il va falloir se renseigner à la main avec GetScrollInfo(), gérer à la main les SB_LINEUP, SB_LINEDOWN et même SB_THUMBTRACK (pour le cas où l'utilisateur aurait déplacé l'ascenseur directement ^^"), s'envoyer soi-même les up/down en cas de WM_MOUSEWHEEL... déplacer chacun des objets contenus dans la fenêtre à coup de h2 = GetDlgItem(h,i); GetWindowRect(h2); MoveWindow(h2) sans oublier de convertir entre coordonnée-client et coordonnée-écran ... et tout ça pour quelque-chose qui clignotte affreusement. Autant dire que quand le frère de Jigé a proposé "de faire ça plutôt en C#", la bataille n'a pas été bien longue pour défendre le proto actuel ... on était plus proche du Turbo Pascal que de l'HTML, en fait
(tout de même, c'est perturbant de re-croiser du code qui fait un CreateWindow(..., BS_PUSHBUTTON, ...) plutôt que d'avoir CreateButton ...)



Vote for your favourite post


No comments:
Post a Comment