FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ExtCreatePen
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
ExtCreatePen
Posted: Sun Sep 05, 2021 10:18 AM

Muy buenas a todos. Hace año que no entro en este esplendido foro, pues tenía el FWH un poco olvidado. Tengo una preguntita.

¿Alguien a utilizado alguna vez la función EXTCREATPEN()?. ¿Sabria como implementarla?.

Resulta que cuando dibujo líneas o rectángulos, las esquinas se me dibujan redondeadas, porque utilizo un FWH antiguo y creo que la única forma que tengo de solucionarlo y obtener esquinas cuadradas es con EXTCREATEPEN para aplicar PS_ENDCAP_SQUARE.

Además, por lo que he estudiado, se podrían crear pens con degradados o dibujitos. Muy interesante.

Estoy intentando implemantarlo en C++, pero tengo problemas con la estructura LOGBRUSH.

Muchas gracias

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 05:04 AM

Antolin,

> Estoy intentando implemantarlo en C++, pero tengo problemas con la estructura LOGBRUSH

Copia aqui lo que tengas hecho en C/C++ y te ayudamos a completarlo :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 12:04 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 12:20 PM
Gracias Karinha. Ese es el ejemplo que estaba utilizando. Y funciona:

Code (fw): Select all Collapse
HB_FUNC( EXTCREATPEN )  //  ExtCreatPen( nStyle, nWidth, nRGBColor, nBStyle, nHStyle ) --> hPen
   {
   LOGBRUSH  lgBrush ;

   lgBrush.lbStyle = ( UINT )   IF( ISNIL( 4 ) || !_parni( 4 )  , BS_SOLID, _parni( 4 ) ) ;
   lgBrush.lbColor = ( COLORREF )  _parnl( 3 ) ;
   lgBrush.lbHatch = ( ULONG_PTR ) _parni( 5 ) ;

   _retnl( ( LONG ) ExtCreatePen( ( DWORD ) ( PS_GEOMETRIC | _parni(1) ), ( DWORD ) _parni(2), &lgBrush, 0, NULL) );
   }


Las esquinas ya me salen cuadradas. El problema que lo tengo diempre con el estilo PS_GEOMETRIC porque no entiendo muy bien lo del estructura LOGBRUSH y en PS_COSMETIC no me coge ni el color ni el ancho de linea.
Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 12:21 PM
Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 12:41 PM
antolin wrote:


Esto és simplesmente espetacular!!

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 01:47 PM

Gracias.

Tengo un FWH muy antiguo y he tenido que implementar muchas clases propias y funciones gráficas para blending y transparencias

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ExtCreatePen
Posted: Mon Sep 06, 2021 03:54 PM
antolin wrote:Gracias Karinha. Ese es el ejemplo que estaba utilizando. Y funciona:

Code (fw): Select all Collapse
HB_FUNC( EXTCREATPEN )  //  ExtCreatPen( nStyle, nWidth, nRGBColor, nBStyle, nHStyle ) --> hPen
   {
   LOGBRUSH  lgBrush ;

   lgBrush.lbStyle = ( UINT )   IF( ISNIL( 4 ) || !_parni( 4 )  , BS_SOLID, _parni( 4 ) ) ;
   lgBrush.lbColor = ( COLORREF )  _parnl( 3 ) ;
   lgBrush.lbHatch = ( ULONG_PTR ) _parni( 5 ) ;

   _retnl( ( LONG ) ExtCreatePen( ( DWORD ) ( PS_GEOMETRIC | _parni(1) ), ( DWORD ) _parni(2), &lgBrush, 0, NULL) );
   }


Las esquinas ya me salen cuadradas. El problema que lo tengo diempre con el estilo PS_GEOMETRIC porque no entiendo muy bien lo del estructura LOGBRUSH y en PS_COSMETIC no me coge ni el color ni el ancho de linea.


asumo que usas 32 bits. Para 64 hay que cambiar unas cosas.

Estas usando correctamente el puntero a la estructura LOGBRUSH. Que valor te devuelve la función ?

De haber un error siempre puedes llamar a la función GetErrMsg() que te devuelve la descripción del valor GetLastError() del API de Windows
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: ExtCreatePen
Posted: Tue Sep 07, 2021 05:27 PM

Hola.

La función así funciona, pero si pongo PS_COSMETIC me devuelve siempre un pen de color negro y ancho 1. No consigo el color y ancho requerido con PS_COSMETIC que por lo visto es más rápido que PS_GEOMETRIC. Pero no te preocupes, para PENS de menos de 3 de ancho utilizaré el PEN de siempre.

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ExtCreatePen
Posted: Wed Sep 08, 2021 05:06 AM
A pointer to a LOGBRUSH structure. If dwPenStyle is PS_COSMETIC, the lbColor member specifies the color of the pen and the lpStyle member must be set to BS_SOLID. If dwPenStyle is PS_GEOMETRIC, all members must be used to specify the brush attributes of the pen.


https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-extcreatepen
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 498
Joined: Thu May 10, 2007 08:30 PM
Re: ExtCreatePen
Posted: Thu Sep 09, 2021 10:36 PM

Gracias Antonio. Por lo visto PS_COSMETIC sólo pinta líneas solidas de un pixel de ancho. El color habrá que establecerlo con SetDCPenColor() o algo así porque con ExtCreatePen sólo se pinta en negro (al menos a mi). Pero no es problema que para eso utilizo el CreatePen() de toda la vida.

Muchas gracias.

Peaaaaaso de foro...

FWH 2007 - xHarbour - BCC55

Continue the discussion