[Api Windows]

fender6 Messages postés 13 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 3 janvier 2010 - 27 nov. 2009 à 17:38
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 27 nov. 2009 à 21:24
Salut,

J'aimerais tracer une ligne dans ma fenêtre que j'ai définie comme ceci : ;)

HWND fenetre1 = CreateWindowEx(WS_EX_STATICEDGE, "edit","...",WS_OVERLAPPED |WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY ,235, 130, 530, 365, fenetrePrincipale, NULL, instance, NULL);


grâce a la fonction :
/code
void dessineLigne (HWND fenetreCiblee, const RECT dimensions, HPEN crayon)
{
        //Déclarations préalables + récupération de la surface de dessin
        PAINTSTRUCT ps;
        HDC dc = BeginPaint(fenetreCiblee, &ps);

        //Application du crayon sur le dc
        SelectObject(dc, crayon);

        //Dessin de la ligne
        MoveToEx(dc, dimensions.left, dimensions.top, NULL);
        LineTo(dc, dimensions.right, dimensions.bottom);

        //Libération de la surface + fin du dessin
        EndPaint(fenetreCiblee, &ps);

        return;
}


J'appelle donc cette fonction comme ceci :
/code
RECT dimensions;
dimensions.left = 10 ;
dimensions.right = 50;
dimensions.top = 50;
dimensions.bottom = 50;

HPEN hpen; // création d'un crayon
hpen = CreatePen(PS_SOLID, 10, RGB(0, 255, 0)); //epaisseur 10
SelectObject(hdc, hpen);

dessineLigne (fenetre1, dimensions, crayon);



Cependant ma ligne ne s'affiche pas :(

Avez vous une idée pour m'aider .
Ou de m'indiquer où est le problème .

Merci

5 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
27 nov. 2009 à 17:49
essaie d'utiliser :
InvalidateRec(hwnd,NULL,TRUE)
UpdateWindow(hwnd)

Pour forcer l'affichage
0
fender6 Messages postés 13 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 3 janvier 2010
27 nov. 2009 à 17:58
Non ça ne change rien

Merci quand même pour ta réponse
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2009 à 18:11
Mets un STATIC au lieu d'un EDIT, devrait aller mieux.
Ensuite tu sous classes ce STATIC pour lui réécrire son WM_PAINT dans lequel tu mettras le code de ta fonction.

ciao...
BruNews, MVP VC++
0
fender6 Messages postés 13 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 3 janvier 2010
27 nov. 2009 à 21:01
Salut BruNews,

Tout d abord merci pour le temps que tu passes a m'aider .

J'ai suivi ton conseil et j'ai mis ma fenetre en static , cela a eu pour effet de la coloré en gris j'ignore si cela et normal.

Etant donné que je debute dans l'api windows je voudrais savoir ce que tu entends par :

tu sous classes ce STATIC pour lui réécrire son WM_PAINT


J'espère que tu pourras m'aider

a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2009 à 21:24
On change l'adresse de la callback par défaut de traitement des messages pour qu'il pointe vers une fonction perso.
Un truc dans ce genre:
WNDPROC OldProcEdNum;
LRESULT CALLBACK EdProcNoPaste(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
if(mssg == WM_PASTE) {MessageBeep(0); return 0;}
return CallWindowProc(OldProcEdNum, hwnd, mssg, wParam, lParam);
}
Fenetre parent à l'init:
case WM_INITDIALOG:
OldProcEdNum = (WNDPROC) SetWindowLongPtr(hednum, GWLP_WNDPROC, (LONG_PTR) EdProcNoPaste);

ciao...
BruNews, MVP VC++
0
Rejoignez-nous