tutorial - doc c#
¿Qué es un "mango"? (3)
Posibles duplicados:
¿Qué es un mango de Windows?
¿Qué es exactamente "manejar"?
Veo referencias a identificadores de ventana, controles que tienen una referencia a un identificador de ventana, etc. Pero no sé qué es un identificador.
Especialmente me gustaría saber qué es, y cualquier detalle relevante, en lo que se refiere a .NET.
El identificador es algo que identifica de forma única el objeto del sistema operativo, ya sea un socket, una primitiva de sincronización, etc. (en Unix, generalmente se denominan descriptores). Técnicamente es un desplazamiento en la tabla de objetos global o un puntero para registrar que contiene información de objetos. Pero necesitas tratar este identificador como un número opaco.
.NET utiliza referencias a objetos, por lo que en .NET se encuentran con manejadores cuando se trata de la interoperación con el sistema operativo.
Un asa es una referencia para el sistema operativo. No tiene la semántica de una referencia de programación, pero lo que sí hace es permitir que los recursos del sistema sepan a qué se refiere cuando se pasa en una llamada a la API.
Por lo general, la manija se envuelve en una instancia de una clase. CWnd es un buen ejemplo, contiene un HWND que es un identificador de una ventana.
Puedes hacerlo. CWnd * pWnd = CWnd :: FromHandle (hWnd) Nota: que CWnd :: FromHandle (hWnd) es estático y no requiere una instancia.
Le devolverá la envoltura en la que está envuelto el hWnd. Bueno, no del todo! Si el asa no está realmente envuelta por un objeto, creará uno Y SOLO SERÁ TEMPORAL. Por lo tanto, úselo una vez y luego deséchelo. Puede crear la instancia porque el hWnd tiene suficiente información en su estructura para que Windows cree una instancia de un objeto CWnd. No lo agrega a la tabla de objetos del controlador v, por lo que es solo temporal.
El HWND es, de hecho, un objeto del núcleo y hay más?
- HWND (CWnd y clases derivadas de CWnd)
- HDC (clases derivadas de CDC y CDC)
- HMENU (CMenu)
- HPEN (CGdiObject)
- HBRUSH (CGdiObject)
- HFONT (CGdiObject)
- HBITMAP (CGdiObject)
- HPALETTE (CGdiObject)
- HRGN (CGdiObject)
- HIMAGELISTA (Lista de Mage)
- SOCKET (CSocket) (¿Debería haber sido HSOCKET?)
- y otros.
No estoy seguro de si todo esto devolvería un objeto temporal si fuera necesario. GetDC (hWnd) obtendrá un hDC de un hWnd pero será temporal, probablemente sea mejor usar la clase CDC.
Lea más: http://wiki.answers.com/Q/What_is_a_handle_in_Windows_Programming#ixzz1JBmoF0lv
Un identificador es una referencia abstracta a algún recurso que le proporcionó otra parte (generalmente el sistema operativo), que puede devolver para hacer referencia a ese recurso.
Los sistemas operativos a menudo contienen una tabla de asas que contiene entidades que los usuarios han creado (archivos abiertos, ...); el identificador es un índice entero en esta tabla. Su proceso se abre, el sistema operativo crea una entrada en su tabla de identificadores, la marca con su nombre (proceso) y devuelve el índice de esa entrada a su proceso. Cuando su proceso desea hacer una lectura, proporciona el identificador entero al sistema operativo, que lo busca en la tabla simplemente usándolo como índice de tabla; ahora sabe de qué entidad (archivo) quiere leer su proceso.
Al colocar su ID de proceso en la entrada del identificador, el sistema operativo puede determinar si el identificador es válido para el proceso. Su proceso puede proporcionar basura como un identificador para el sistema operativo; si la ranura del asa coincide, el sistema operativo hará lo que quieras, independientemente de lo estúpido que sea. Después de todo, es su recurso.