¿Qué es exactamente un mango?
<
En un entorno Windows, se utiliza un identificador para identificar un proyecto.
En el entorno Windows, los identificadores se utilizan para identificar módulos, tareas, instancias, archivos, bloques de memoria, menús, controles, fuentes y recursos (incluidos iconos, cursores, caracteres, etc.), cadenas (cadenas ) Elementos, objetos GDI (objetos GDI), incluidos mapas de bits (mapas de bits), pinceles (pinceles), metarchivos (metarchivos), paletas (paletas), pinceles (pinceles), regiones (áreas) y tabla de descripción de dispositivos (contexto del dispositivo).
<
Un identificador es un número entero único utilizado por WINDOWS para identificar un objeto creado o utilizado por una aplicación. varios identificadores para identificar cosas como instancias de aplicaciones, ventanas, controles, mapas de bits, objetos GDI, etc. Los identificadores de WINDOWS son algo así como los identificadores de archivos C.
Segundo, código fuente de MFC:
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) nombre de estructura ##__ { int no utilizado }; typedef nombre de estructura ##__ *nombre
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(nombre) typedef HANDLE nombre
#endif
DECLARE_HANDLE(HMODULE);
DECLARE_HANDLE(HINSTANCE);
DECLARE_HANDLE(HLOCAL); p>
p>
DECLARE_HANDLE(HGLOBAL);
DECLARE_HANDLE(HDC);
DECLARE_HANDLE(HRGN);
DECLARE_HANDLE(HWND);
DECLARE_HANDLE(HMENU);
DECLARE_HANDLE( HACCEL);
DECLARE_HANDLE(HTASK); p>
HANDLE es PVOID, que es un puntero sin tipo.
Los identificadores de recursos anteriores no son más que punteros a estructuras, ahora ni siquiera M$ es necesario. Explique el significado de que M$ haga esto. Esto se llama encapsulación de datos. Puede pasar el puntero de estructura interna de M$ en el programa, pero no sabe a qué apunta al final.
Los identificadores y los punteros son en realidad dos conceptos completamente diferentes. Un identificador es solo un número entero de 32 bits que se utiliza para marcar objetos del sistema o de proceso en WIN32. Puede interpretarse como un índice de objeto (hasta cierto punto, porque M$ no revela completamente la tecnología relacionada). más como un índice de objeto Una relación de mapeo (desde el identificador hasta el puntero del objeto), en lugar de un "subíndice de matriz" puro. ".
Un identificador puede entenderse como una porción de memoria que apunta o identifica un "recurso" (como un archivo, bloque de memoria, menú, etc.). El sistema operativo utiliza identificadores para localizar objetos principales. El sistema operativo utiliza identificadores para localizar objetos principales y recursos del sistema.
Un puntero es una unidad de "datos o instrucciones" que apunta a la memoria.
Para ser precisos, un identificador es en realidad un puntero a un recurso, pero es diferente de un puntero: el puntero corresponde a la dirección de los datos en la memoria y se puede modificar libremente obteniendo el puntero. ; Windows no quiere que programas comunes modifiquen su estructura de datos interna porque es demasiado inseguro. Por lo tanto, Windows asignará un identificador (esencialmente sigue siendo un puntero, pero no lo operará directamente) para cada región de memoria declarada usando una función como GlobalAlloc.
4. Citando metáforas:
El pastorcillo señala la aldea de Xinghua.
La mano del pastorcillo se utiliza como puntero, el logotipo de la aldea de Xinghua se utiliza como puntero. El mango, y el hotel en Xinghua Village se utiliza como objeto.
Adjunto: Tres métodos para obtener el identificador de ventana
1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
2.HWND FindWindowEx(HWND hwndParent, HWND HWND WindowFromPoint(POINT& Point)//Obtiene el HWND de la ventana en la posición actual del puntero del mouse
3. HWND FindWindowEx(HWND hwndParent, HWND HWND WindowFromPoint(POINT& Point)//Obtiene el HWND de la ventana en el puntero actual del mouse posición
p>