obtener hdc de un userform

17/11/2008 - 23:52 por Ivan | Informe spam
hola a todos

¿sabeis como podria obtener le dispositivo de contexto (hdc) de un
userForm?

algo tipo al API findWindow o similar para el Hwnd pero para el Hdc

seria de cara a unas pruebas que estoy haciendo con diversas APIs del
GDI y los userForm

bueno, lo dicho, si sabeis algo os lo agradezco

un saludo
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
18/11/2008 - 00:40 | Informe spam
hola, Ivan !

sabeis como podria obtener le dispositivo de contexto (hdc) de un userForm?
algo tipo al API findWindow o similar para el Hwnd pero para el Hdc
seria de cara a unas pruebas que estoy haciendo con diversas APIs del GDI y los userForm...



por que no comentas algo mas concreto acerca de "las pruebas" que estas intentando ?
y a cual/es version/es de excel pretendes dar "soporte" ?

saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
18/11/2008 - 02:11 | Informe spam
hola Hector,

por que no comentas algo mas concreto acerca de "las pruebas" que estas intentando ?
y a cual/es version/es de excel pretendes dar "soporte" ?



en realidad se trata tan solo de realizar unos ejercicios de un manual
sobre APIs en VB [de Augusto Roa] para intentar familiarizarme un poco
con el uso de estas

pero al no tener VB stand alone ¿.. se dice asi..:-)? estoy usando
VBA, y como ya sabes los userform (de los controles ni hablamos) ni
siquiera exponen el Hwnd

de todas formas quizas tenga un error de concepto respecto al Hdc y no
sea algo que provean en si mismos los [user]Form sino que se les
asigne de alguna forma (no se si se me entiende)

y en concreto las pruebas que estoy realizando son con funciones del
GDI, muchas de las cuales parece que requieren el hdc de la 'ventana'
como parametro

para retorcer mas la cosa, en realidad inicialmente mi intencion era
practicar en VBa para luego buscar el equivalente o adaptarlas para VB
Net, sobre todo para intentar comprender su forma de uso en este
ultimo lenguaje, donde si no me equivoco varia bastante (no solo en
los tipos Long x integer) la forma de llamarlas

de todas formas, en lo que a las funciones del GDi se refiere me da la
impresion que en Net ya estan en buena parte cubiertas por diferentes
clases cuyas propiedades y/o metodos son cuasiReproducciones de dichas
Apis,

aunque muchas de estas propiedades y metodos estoy consiguiendo
entenderlas mejor a partir del estudio de las apis que de la propia
ayuda de VB Net

en concreto el ultimo ejercicio que estaba realizando era crear un
userform irregular, o mejor dicho: no rectangular. mediante la
creacion y asignacion de una 'region' al formulario Para esto solo
hace falta el Hwnd, que no resulta complicado conseguir (pej.
EsVentana ...;-)) ), y de hecho parece funcionar aceptablemente

pero una vez dada la forma al userForm tocaria dibujar los diferentes
elementos del mismo para adaptarlos a la nueva forma, y aqui si me da
la impresion que hace falta el HDC, aunque no me hagas demasiado caso

bueno, de todas formas me he dejado el manual y los ejercicios en el
curro y hasta mañana no podre comentarte exactamente las Apis que creo
podrian servir para lo comentado, pero al menos supongo que te haras
una idea

entre tanto muchas gracias por la atencion

un saludo
Ivan

PD: en cuanto a la/s version/es, como supongo se desprende de lo
comentado, en realidad no seria importante, pues se trata de estudiar/
comprender algo sobre las apis, independientemente de su posible
implementacion en uno u otro entorno
Respuesta Responder a este mensaje
#3 Héctor Miguel
18/11/2008 - 03:29 | Informe spam
hola, Ivan !

no se si estamos hablando de lo mismo, pero (si los acronimos no fallan)...

- hdc significa "Hard Duty Cooling" (refrescando el trabajo duro)

- las API's con las que puedes administrarlos son:
- Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
(ya sabes como obtener el "hwnd")
- Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
(requieres el mismo "hwnd" + el "hdc" que obtuviste con la anterior)

- algunos ejemplos de como (y/o donde) usarlos los encuentras en la pagina de Randy Birch:

Visual Basic Window/Form Routines
DrawFocusRect: Simulating Non-Client Form Movement
http://vbnet.mvps.org/code/forms/drawfocusrect.htm

Visual Basic Screen & System Metrics
InflateRect: Highlighting External Windows
http://vbnet.mvps.org/code/screen/inflaterect.htm

Visual Basic Common Control API Routines
CreateWindowEx: Create the Common Control Header
http://vbnet.mvps.org/code/comctl/ccheader.htm

Visual Basic Subclassing Routines
WM_HOTKEY: System-Wide Keyboard Trapping
http://vbnet.mvps.org/code/subclass...hotkey.htm

saludos,
hector.

__ OP __
por que no comentas algo mas concreto acerca de "las pruebas" que estas intentando ?
y a cual/es version/es de excel pretendes dar "soporte" ?



en realidad se trata tan solo de realizar unos ejercicios de un manual sobre APIs en VB [de Augusto Roa]
para intentar familiarizarme un poco con el uso de estas

pero al no tener VB stand alone .. se dice asi..:-)? estoy usando VBA
y como ya sabes los userform (de los controles ni hablamos) ni siquiera exponen el Hwnd

de todas formas quizas tenga un error de concepto respecto al Hdc y no sea algo que provean en si mismos los [user]Form
sino que se les asigne de alguna forma (no se si se me entiende)

y en concreto las pruebas que estoy realizando son con funciones del GDI
muchas de las cuales parece que requieren el hdc de la 'ventana' como parametro

para retorcer mas la cosa, en realidad inicialmente mi intencion era practicar en VBa
para luego buscar el equivalente o adaptarlas para VB Net, sobre todo para intentar comprender su forma de uso en este ultimo lenguaje
donde si no me equivoco varia bastante (no solo en los tipos Long x integer) la forma de llamarlas

de todas formas, en lo que a las funciones del GDi se refiere me da la impresion que en Net ya estan en buena parte cubiertas
por diferentes clases cuyas propiedades y/o metodos son cuasiReproducciones de dichas Apis,

aunque muchas de estas propiedades y metodos estoy consiguiendo entenderlas mejor
a partir del estudio de las apis que de la propia ayuda de VB Net

en concreto el ultimo ejercicio que estaba realizando era crear un userform irregular, o mejor dicho: no rectangular
mediante la creacion y asignacion de una 'region' al formulario Para esto solo hace falta el Hwnd
que no resulta complicado conseguir (pej. EsVentana ...;-)) ), y de hecho parece funcionar aceptablemente

pero una vez dada la forma al userForm tocaria dibujar los diferentes elementos del mismo para adaptarlos a la nueva forma
y aqui si me da la impresion que hace falta el HDC, aunque no me hagas demasiado caso

bueno, de todas formas me he dejado el manual y los ejercicios en el curro y hasta mañana no podre comentarte exactamente
las Apis que creo podrian servir para lo comentado, pero al menos supongo que te haras una idea.

entre tanto muchas gracias por la atencion

un saludo
Ivan

PD: en cuanto a la/s version/es, como supongo se desprende de lo comentado, en realidad no seria importante
pues se trata de estudiar/comprender algo sobre las apis, independientemente de su posible implementacion en uno u otro entorno
Respuesta Responder a este mensaje
#4 Ivan
18/11/2008 - 13:40 | Informe spam
hola Hector

no se si estamos hablando de lo mismo, pero (si los acronimos no fallan)...

- hdc significa "Hard Duty Cooling" (refrescando el trabajo duro)



aunque la traduccion no me cuadra demasiado (yo diria que es algo asi:
dispositivo de contexto de ventana - handle device context-) creo que
efectivamente estamos hablando de lo mismo

al menos en cuanto a las funciones que me proporcionas [y a falta de
probarlas] me da la impresion que SI son las que buscaba

voy a echarlas un ojo junto con los enlaces y si tengo dudas te
comento

muchas gracias y hasta pronto ;-)

Ivan
Respuesta Responder a este mensaje
#5 Vinchenzo vinç
30/11/2008 - 02:38 | Informe spam
"Ivan" escribió en el mensaje de noticias
news:
hola Hector

no se si estamos hablando de lo mismo, pero (si los acronimos no
fallan)...

- hdc significa "Hard Duty Cooling" (refrescando el trabajo duro)



aunque la traduccion no me cuadra demasiado (yo diria que es algo asi:
dispositivo de contexto de ventana - handle device context-) creo que
efectivamente estamos hablando de lo mismo



¡Un saludo!, ...ya sabéis que me gusta venir de vez en cuando a saludar
sin que parezca un OT ;-)

Solo quería comentar, esclarecer, o poner una pincelada si lo preferís,
conferme el término 'hDC' se refiere en efecto a un controlador de un
contexto de dispositivo (Handle to a Device Context).

El dispositivo de contexto es una estructura interna que incluye todas
las "herramientas" necesarias para "dibujar, pintar y colorear" mediante las
funciones de la interfaz de dispositivos gráficos (Graphics Device
Interface) gracias al controlador obtenido.
El DC mantiene la información de estos objetos, y estas "herramientas de
dibujo" (objetos) lo forman el papel o lienzo, el lápiz para dibujar líneas,
una brocha para pintar y rellenar, una paleta de colores, un mapa de bits, y
un par de objetos más. Estos objetos gráficos tienen asociadas ciertas
propiedades, por ejemplo un color de fondo, un estilo y color para el lápiz
y la brocha, su grosor, el nombre de una fuente y su tamaño, etc.

No manipularemos el dispositivo de contexto directamente, siempre será
mediante las funciones de la GDI, y es importante remarcar la segunda
función que comentó Héctor, "ReleaseDC". Cada vez que termines de usar el
hDC, no olvides llamar a esta función para liberar el controlador, o de lo
contrario tendrás fugas de memoria durante la ejecución. Si no se
gestionaran correctamente los objetos de GDI se podría obtener un impacto
muy negativo en los recursos del sistema.

La función GetDC te devolverá el contexto de dispositivo del área
cliente de la ventana que especifiques, y si no especificas ninguna te
devolverá el de la pantalla.
Si necesitas tener también acceso al área no-cliente de la ventana
usarás la función GetWindowDC. GetDCEx es la versión extendida de GetDC, y
te podría proporcionar opciones interesantes.

En .Net no necesitarías incluir las llamadas implícitamente a las
funciones de la GDI, supongo que a menos que necesites manipular el
dispositivo de alguna ventana de otro proceso, en .Net tienes el espacio de
nombres 'System.Drawing' que encapsula la GDI+, el cual no he revisado más
que muy por encima, y hace varios meses ya, tus conocimientos están más
avanzados que los míos en .Net.


Bueno, seguiremos en contacto.

Saludos cordiales, compañeros.



( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida