Autor Tema: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]  (Leído 3063 veces)

0 Usuarios y 1 Visitante están viendo este tema.

SONIC88

  • Bit
  • Mensajes: 9
  • Reputación: +0/-0
    • Ver Perfil
Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« en: Mayo 17, 2010, 11:58:57 am »
Hola compipas del foro, necesito hacerles una consulta técnica, y que el titulo lo refleja, ¿cómo puedo dibujar sobre un hDC de una ventana en Windowless?, específicamente un Usercontrol. Necesito dibujar un texto con Drawtext (algo común, ya que no quiero usar un Label dentro del control :P).

La cosa es que estoy haciendo un playlist, pero hacer cada botón de esa lista con una ventana vi que acumula mucha memoria, quisiera saber ademas si el control sin ventana gasta mas o menos memoria, ya que si no tendría que dibujar los botones directo sobre el contenedor y no como otro usercontrol aparte.

Por otra parte "creo" haber visto por ahí pero no recuerdo donde, un control de estas características en el cual se le creaba un hDC, jaja si alguien tiene algún datito y tiempo favor me ayuda.

Gracias!!    ::)
« última modificación: Mayo 17, 2010, 08:58:35 pm por SONIC88 »
∞•••∞ MαЯcΘ™ ∞•••∞

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Dibujar en hDC de Un Usercontrol Windowless
« Respuesta #1 en: Mayo 17, 2010, 02:54:13 pm »
Hola Sonic88, fijate de esta forma, mira dentro del UserControl_Initialize que hay un par de propiedades que tenes que setear.

Código: (vb) [Seleccionar]
Option Explicit
'propiedades del usercontrol en tiempo de diseño
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Private Const DT_CENTER = &H1

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Sub UserControl_Initialize()
    'Propiedades del usercontrol en tiempo de diseño "Windowless = True"
    UserControl.BackStyle = 0 'Transparent << opcional
    UserControl.ClipBehavior = 0 'none
    UserControl.ScaleMode = vbPixels '<< opcional
End Sub

Private Sub UserControl_Paint()

    Dim Rec As RECT
   
    Rec.Right = UserControl.ScaleWidth
    Rec.Bottom = UserControl.ScaleHeight
   
    DrawText UserControl.hdc, "hola mundo", 10, Rec, DT_CENTER


End Sub


Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
    HitResult = 1
End Sub


En cuanto al uso de la memoria , no estoy muy seguro pero tengo entendido que consume menos, alguien mas puede afirmar esto?

en cuanto al rendimiento depende de cuanto o que dibujes, ya que esto se va a ejecutar dentro del UserControl_Paint y si tenes un rutina muy cargada te podria llegar a relantar un poco el proyecto, en ese caso creo que combiene crear un buffer de lo que queres pintar, pero repito en un caso que sea muy muy nesesario, cosa que con un DrawText  o un bitblit no haria falta.

SONIC88

  • Bit
  • Mensajes: 9
  • Reputación: +0/-0
    • Ver Perfil
Re:Dibujar en hDC de Un Usercontrol Windowless
« Respuesta #2 en: Mayo 17, 2010, 04:20:57 pm »
Hola Leo gracias por tu respuesta, aunque yo tengo ese mismo código en mi usercontrol, pero no se no me funciona me tira el:

Error "398" en tiempo de ejecución:

El sitio cliente no esta disponible.
  ???

Lo raro es que si pego el codigo en un nuevo usercontrol si funciona jajaja voy a tener que ver bien cual es la falla,
pedí ayuda porque pensé que lo estaba haciendo mal o me faltaba algo. ;D

Muchas gracias Leo y saludos. ;D
∞•••∞ MαЯcΘ™ ∞•••∞

SONIC88

  • Bit
  • Mensajes: 9
  • Reputación: +0/-0
    • Ver Perfil
Re:Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #3 en: Mayo 17, 2010, 08:56:47 pm »
 ??? Bueno en vista que no encontré la cuestión que provocaba error jaja me vi en la obligación de ponerle On Error Resume Next;D  y bueno la verdad así funcionó. Pero aun no se por qué lanzaba ese error.

Bueno gracias por su tiempo.

Saludos!!  ;D
∞•••∞ MαЯcΘ™ ∞•••∞