elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]  (Leído 4,541 veces)
SONIC88

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« en: 17 Mayo 2010, 16:42 pm »

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 :xD).

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!!  :rolleyes:

EDITO:

<!--- Solucionado --->

Igual gracias por los que pasaron por aquí.


« Última modificación: 18 Mayo 2010, 02:39 am por SONIC88 » En línea

∞•••∞ MαЯcΘ™ ∞•••∞
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #1 en: 18 Mayo 2010, 21:30 pm »

Estaria bien que pusieses la respuesta para que todo el mundo pueda resolver un problema igual o similar


En línea

SONIC88

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Re: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #2 en: 18 Mayo 2010, 22:47 pm »

Bueno aca dejo la respuesta que me dieron en el foro de Leandro Ascierto.

Respuesta en código:

Código
  1. Option Explicit
  2. 'propiedades del usercontrol en tiempo de dise&#241;o
  3. 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
  4.  
  5. Private Const DT_CENTER = &H1
  6.  
  7. Private Type RECT
  8.    Left As Long
  9.    Top As Long
  10.    Right As Long
  11.    Bottom As Long
  12. End Type
  13.  
  14. Private Sub UserControl_Initialize()
  15.    'Propiedades del usercontrol en tiempo de dise&#241;o "Windowless = True"
  16.    UserControl.BackStyle = 0 'Transparent << opcional
  17.    UserControl.ClipBehavior = 0 'none
  18.    UserControl.ScaleMode = vbPixels '<< opcional
  19. End Sub
  20.  
  21. Private Sub UserControl_Paint()
  22.  
  23.    Dim Rec As RECT
  24.  
  25.    Rec.Right = UserControl.ScaleWidth
  26.    Rec.Bottom = UserControl.ScaleHeight
  27.  
  28.    DrawText UserControl.hdc, "hola mundo", 10, Rec, DT_CENTER
  29.  
  30.  
  31. End Sub
  32.  
  33.  
  34. Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
  35.    HitResult = 1
  36. End Sub
  37.  

Aunque yo en realidad ya tenía este código, el problema es que yo pensaba que le faltaba algo o había que declarar algo más, como lo expuse en mi pregunta.

Lo curioso es que al correr el Usercontrol, este provocaba un error al dibujar el texto (o lo que sea que dibujes mediante el método PAINT), entonces me aparece el famoso error:

Error "398" en tiempo de ejecución:

El sitio cliente no esta disponible.
  :xD

De ahí mi pregunta.

La verdad me siguió saliendo el error, el cual nunca supe por qué. La solución simplemente fue agregar "On Error Resume Next" al principio del evento Paint antes de dibujar el texto. Por otra parte probé el código en un Usercontrol nuevo y no da error en ninguna circunstancia.

En fin, gracias a Leandro por darse el tiempo de responder.

Saludos.
« Última modificación: 19 Mayo 2010, 06:30 am por SONIC88 » En línea

∞•••∞ MαЯcΘ™ ∞•••∞
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #3 en: 19 Mayo 2010, 12:18 pm »

Sonic88 , el error seguramente es porque haces referencia al parent, o el extender en algun lugar seguramente lo puede solucionar con

If Ambient.UserMode Then

si no funciona pone la linea del error

Saludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #4 en: 19 Mayo 2010, 15:05 pm »

alguna vez alguien me dijo que asi se solucionaba...

Código
  1.  
  2. rem Declaraciones API:
  3. Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  4. Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  5.  
  6. rem Variables privadas del control:
  7. private lib32 as long
  8.  
  9. rem control_Initialize:
  10. lib32=loadlibrary ("Shell32.dll")
  11.  
  12. rem control_finalize:
  13. call FreeLibrary (lib32)
  14.  
  15.  

Código
  1.  
  2. Rem Declaraciones API:
  3. Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  4. Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  5. Rem Variables privadas del control:
  6. Private lib32 As Long
  7.  
  8. Private Sub UserControl_Initialize()
  9.    lib32 = LoadLibrary("Shell32.dll")
  10. End Sub
  11.  
  12. Private Sub UserControl_Terminate()
  13.    FreeLibrary (lib32)
  14. End Sub
  15.  
  16.  
  17.  

Dulce Infierno Lunar.
« Última modificación: 19 Mayo 2010, 15:11 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
SONIC88

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Re: Dibujar en hDC de Un Usercontrol Windowless [Solucionado]
« Respuesta #5 en: 19 Mayo 2010, 18:52 pm »

Hola compipas, gracias por sus respuestas.

Bueno y si, era eso del extender que provocaba el error, lo que pasa es que los botones de la lista los hice como si fueran OptionButton con lo cual necesitaba esa opción para cuando se seleccione un boton el otro pierda la selección. En fin era algo simple, yo pensaba que me faltaba algo de código, pero no era así, la verdad no sabía que se provocara esto. Me di cuenta de lo del extender cuando fui borrando partes del código :xD , porque a mi me marcaba el error en el método PAINT, jaja entonces quedé medio perdido, porque antes no me había pasado.

Bueno chicos muchas gracias por todo y será hasta la próxima.

Saludos desde Chile!!!
« Última modificación: 20 Mayo 2010, 15:17 pm por SONIC88 » En línea

∞•••∞ MαЯcΘ™ ∞•••∞
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Evitar parpade al redibujar un usercontrol (Solucionado)
.NET (C#, VB.NET, ASP)
Zeroql 2 3,633 Último mensaje 17 Enero 2012, 19:33 pm
por Zeroql
Problema al dibujar un rectangulo en un UserControl
.NET (C#, VB.NET, ASP)
Zeroql 0 1,863 Último mensaje 26 Febrero 2012, 18:18 pm
por Zeroql
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines