Par CGi
Le 24 avril 2004
Introduction :
Dans cet article nous allons voir à l'aide d'un exemple comment tracer le chemin
d'un texte (contour des lettres), faire une découpe de ce chemin et dessiner sur
la découpe.
Pour arriver à nos fins nous utiliserons les fonctions de Paths et de Clipping du GDI de Windows. Explication :
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
LOGFONT lf;
HDC hdc = GetDC(Handle);
// Initialisation de la structure LOGFONT
char f[32]={"Arial Black"};
ZeroMemory(&lf, sizeof(LOGFONT));
strcpy(lf.lfFaceName,f);
lf.lfHeight = 100;
// Céation de la fonte
HFONT hfont = CreateFontIndirect(&lf);
HFONT hfontOld = SelectObject(hdc, hfont);
// Création du crayon
HPEN hpen = CreatePen(PS_SOLID, 3, 0);
HPEN hpenOld = SelectObject(hdc, hpen);
// Dessin du chemin
BeginPath(hdc);
TextOut(hdc, 10, 10, "Bonjour", 7);
EndPath(hdc);
StrokePath(hdc);
// Dessin dans la découpe du chemin
SIZE sz;
GetTextExtentPoint32(hdc, "Bonjour",7 , &sz);
BeginPath(hdc);
TextOut(hdc, 10, 120, "Bonjour", 7);
EndPath(hdc);
SelectClipPath(hdc, RGN_XOR);
for (int i = 121; i < (120 + sz.cy); i += 6) {
MoveToEx(hdc, 11, i, (LPPOINT) NULL);
LineTo(hdc, (10 + sz.cx), i);
}
SelectObject(hdc, hfontOld);
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
DeleteObject(hfont);
ReleaseDC(Handle, hdc);
}
Dans cet exemple nous dessinerons uniquement à l'aide des fonctions du GDI.
Tout d'abord nous récuperons un contex de périférique HDC pour dessiner puis
nous créons une fonte à l'aide de la fonction CreateFontIndirect
qui utilise la structure LOGFONT précédement initialisé. Nous sélectionnons cette
fonte pour le contex de périférique en cours. Même opération pour un crayon.
Bon découpage.
|
|
C/C++ |
Les pointeurs du C et du C++.
Les listes chainées en C. Liste simplement chaînée. Liste triée. Liste doublement chaînée. Les Arbres. Le C orienté objets ? |
|
Assembleur |
Programmer en assembleur avec Visual C++.
|
|
DotNet |
Création d'un composant .Net avec C# Builder.
Création d'un contrôle WinForm pour .Net. Création d'une application MDI avec C# Builder. |
|
Java |
Applet: Animation dans une applet java.
|