Développement sous Windows en C en utilisant les API

 

Image non trouvée !

Microsoft

 

 

 

 

Toutes les fonctions disponibles pour Windows ne seront bien sûr pas détaillées ici. Je vous en donne les principales. A vous de faire une visite sur le site de Microsoft. En recherchant une fonction, Microsoft vous donnera alors toutes les autres fonctions en rapport avec celle-ci. Par exemple, la recherche de la fonction getmessage() donne ceci et vous trouverez à la fin un paragraphe "See also" avec toutes les autres fonctions associées. Voyez aussi dans l'annexe pour les liens sur le site de Microsoft.

Je n'utiliserai ici que le C pur, mais rien n'empêche d'utiliser le C++ si cela s'avère nécessaire, personnellement, je n'y vois aucune objection, au contraire, cela peut même simplifier le développement dans certains cas.

Par contre, il faudra donc bien vérifier que le projet soit bien positionné sur Not using MFC...

 

Voici les chapitres qui seront étudiés ici:

- Les différentes versions de Windows pour le commun des mortels.

- Les bases du développement

  • La fonction WinMain()
  • Créer une classe de fenêtre (WNDCLASS & WNDCLASSEX) et l'enregistrer sous Windows (RegisterClass & RegisterClassEx)
  • Créer une instance de fenêtre à partir de la classe (CreateWindow & CreateWindowEx)
  • Gérer la file d'attente (Structure MSG, GetMessage(), TranslateMessage() et DispatchMessage())
  • La procédure de gestion des messages d'une fenêtre (WM_CREATE, WM_DESTROY et WM_PAINT, PostQuitMessage())

- Le GDI

  • Récupération/libération d'un handle sur un contexte de périphérique: GetDC(), ReleaseDC(),
  • Le message WM_PAINT et ses fonctions: BeginPaint(), EndPaint() ainsi que la structure rcPaint, GetWindowDC() et récupération ou invalidation des informations sur ce contexte de périphérique hors message WM_PAINT.
  • InvalidateRect (), GetClientRect(), GetWindowRect() mais aussi une remarque sur CreateDC () et CreateCompatibleDC().
  • Changer de repère, d'unité, les origines du repère, ou encore l'échelle
  • Fontes et affichage de caractères:
    • Affichage d'un texte et modification de ses attributs (TextOut, DrawText, SetTextAlign(), SetTextColor(), ...)
    • Affichage d'un texte dans le style utilisé par une barre de status
    • Gestion des fontes
  • Taille en hauteur et en largeur d'un caractère ou d'une chaine dans un contexte périphérique: GetTextMetric() et GetTextExtentPoint32()
  • Les opérations graphiques:
    • Affichage de points, droites, rectangles, ellipses, ...
    • Les raster
    • Les régions
    • Le clipping
    • Affichage et traitement d'un bitmap: CreateCompatibleDC()


- Fonction graphique hors GDI !?

  • Le scrolling.

- Les barres de défilement - ascenseurs

  • Fonctions de bases des ascenseurs
  • Exemples de gestion d'ascenseurs dans une application
  • Annexes - Structure SCROLLINFO

- Le clavier, la souris et le joystick

  • Le clavier:
    • Introduction
    • Les messages d'états, de caractères
    • Un curseur nommé Caret...
    • Accélérateur clavier.
  • La souris:
    • GetSystemMetrics() pour détecter la souris et ses boutons
    • Modifier le dessin représentant le curseur de la souris : LoadCursor()
    • Les messages de la souris
    • conversion des coordonnées via ClientToScreen() et ScreenToClient()
    • Capturer la souris ! SetCapture() et ReleaseCapture()
  • Le joystick:
    • Vérifier la présence d'un driver et le nombre de joysticks supportés:joyGetNumDevs()
    • Lire l'état des joysticks par joyGetPos()
    • Caractéristiques d'un joystick:joyGetDevCaps()
    • Capturer le joystick pour traiter ses messages:joySetCapture()et joySetThreshold()
    • Libérer un joystick: joyReleaseCapture()
    • Les messages
    • Exemple Windows
    • Aller plus loin: joyGetPosEx()
    • Calibrage d'un joystick

- Fonctions complémentaires de gestion des fenêtres

  • Etat de la fenêtre (icônisée, zoomée, ...)
  • Récupérer des informations sur la classe d'une fenêtre
  • Repositionner une fenêtre, ou modifier un attribut de celle-ci
  • Donner le focus
  • Gérer la couleur de fond d'une fenêtre après création celle-ci
  • Flasher une fenêtre
  • La fenêtre dans le systray
  • Création d'une fenêtre dont la taille de la zone client est connue
  • Création d'une fenêtre fille
  • Vous avez un message...
  • Enumérer les fenêtres

- D'autres types de fenêtres

  • Les dialogues box
  • L'écran
  • Informer/Avertir l'utilisateur par des messages (Rien à voir avec les messages que peut recevoir une fenêtre !)
    • La fonction MessageBox()
    • et la fonction complémentaire MessageBeep().
  • Dialogues de sélection de fichiers/répertoires.

- Les fenêtres spécialisées:Les contrôles

  • Les boutons
  • Les cases à cochées
  • La barre de progression
  • La barre de statue
  • La classe ToolBar
  • La classe edit

- Les menus

  • Definition/structure et principes
  • Définir les éléments d'un menu
    • Définir un menu le plus simplement en utilisant un éditeur de ressource.
    • En créant un fichier de ressource à la main...
    • En utilisant des fonctions C CreateMenu(), AppendMenu()
      • Déclaration et affichage du menu dans une fenêtre
        • Au niveau de la définition de la classe de fenêtre.
        • A la création d'une instance de fenêtre.
        • Après la création de l'instance d'une fenêtre.
  • Affichage (ou restauration) d'un menu:DrawMenuBar ().
  • Les messages pour la gestion du menu
  • Fonctions supplémentaires pour gérer des menus
  • Modification du menu système
  • Des menus avec des images
  • Accélérateurs clavier
    • Définir les accélérateurs clavier
    • Utilisation des accélérateurs clavier dans notre programme: LoadAccelerators(), TranslateAccelerator()

- Le drag and drop

  • Etude de la phase drop

- Gestion des fichiers/répertoires

  • Gestion des fichiers:les bases
  • Gestion des répertoires
  • Gestion complémentaire des fichiers ou répertoires
  • Enumérer les fichiers/répertoires
  • Dialogues de sélection de fichiers/répertoires
  • Manipulation des noms de fichiers/répertoires

- Les allocations de mémoire

  • Allocation de mémoire fixe, déplaçable, initialisée ou non
  • Vérouillage/dévérouillage de la mémoire déplaçable afin d'obtenir un pointeur
  • Libération de la mémoire
  • Fichier mappé (ou équivalant Unix de la mémoire partagée entre applications)

- Le Multithreading et tout ce qui en découle...

Communication inter-thread, Protection ou restriction des données/ressources,...

  • Introduction
  • Les threads
  • Communication entre threads
  • Les sections critiques et les mutex (Protection des données/ressources et ne permettre de lancer qu'une seule instance de l'application)
  • Utilisation des semaphores pour limiter à un nombre restreint l'accès simultané à une ressource.
  • Les évènements
  • Les timers

- Les horloges ou timers

  • Gestion des timers façon Windows 3.1 càd timer pour un thread dans un thread.

- TicTac

  • Récupérer la date et l'heure système
    • Récupération de l'heure système avec time() ou _time64()
    • conversion de l'information en JJMMAAHHMMSS
  • Chronomètre
    • Timer de base
    • Timer multimédia
    • Timer haute précision

- Le presse papier

  • Introduction
  • Quelques différents types de données du presse-papier
  • Envoyer du texte dans le presse papier
  • Récupérer un texte dans le presse papier
  • Envoyer une image dans le presse papier
  • Récupérer une image dans le presse papier
  • Données multiples
  • Restitution différées
  • Personnalisation des données
  • Clipboard Viewer - Demander à Windows d'informer notre application que des données sont envoyées dans le presse papier

- Le son

  • Le format d'un fichier Wav
  • Vos premiers sons par MessageBeep() (Rappel)
  • Utilisation du MCI pour jouer un fichier Wav


- Créer et utiliser une DLL

- Registry

  • Définition
  • Histoire
  • Consulter la base de registres
  • Structure du registre
  • Lire la base de registres
  • Ecrire dans la base de registres
  • Les droits

- Les variables d'environnement

- Screen-Saver

  • Introduction
  • Première approche - Détaillée et non officielle -
    • Création d'un screen-saver à la main
    • Exemple
  • Seconde approche, l'officielle celle-ci
    • La librairie et l'include
    • Création d'une ressource: IDS_DESCRIPTION, ID_APP et DLG_SCRNSAVECONFIGURE
    • La procédure de messages du screen-saver: ScreenSaverProc()
    • La procédure de messages de la dialogue-box de configuration:ScreenSaverConfigureDialog
    • La procédure de registration:RegisterDialogClasses

- HOOK !

- Programmation réseaux/les sockets

  • Introduction
  • Include nécessaire
  • Le cas Windows
  • Principales fonctions de gestion des sockets
  • Des liens intéressants



- Infos système...

- Annexes

  • Macros
  • Structures
  • Fonctions particulières
  • Liens Microsoft intéressants

- Exemple d'application...

  • Editeur/assembleur 6502 pour Atari 800XL
  • Avec son petit jeu de voitures en exemple

Windows est compatible entre les différentes versions de Windows...Enfin presque !

Si vous aviez développé des applications avec des versions 16 bits de Windows, il y a eu du changement. near, far n'ont plus grandes significations en 32 bits...

Je vous conseil donc de faire un tour chez Microsoft pour la portabilité de votre programme !

 

Des sites qui parlent du développement sous Windows: Certains chapitres sont quand même un peu succincts...

Developpez.com, page d'accueil: http://c.developpez.com/
Ou directement: http://bob.developpez.com/tutapiwin/ pour les fenêtres, http://chgi.developpez.com/windows/ pour les dialogues.