MFC mantiene una cantidad de mapas de control, desde HWND a CWnd, HDC a CDC, etc., que se almacenan en el estado del hilo. Cada mapa de asa contiene un mapa permanente y un mapa temporal: las entradas permanentes se agregan cuando se llama a un método como CWnd :: Create o CDC :: Attach, mientras que las entradas temporales se crean cuando se llama FromHandle en un identificador que no tiene un entrada permanente.
Las entradas temporales se limpian durante el procesamiento inactivo (en CWinApp :: OnIdle), por lo que solo se pueden usar de forma segura mientras se procesa el mensaje actual. Tan pronto como regrese al ciclo de mensajes, o ingrese otro ciclo modal (por ejemplo, al llamar a DoModal), es posible que se eliminen.
¿Esto significa que podría obtener el HWND del CWnd (posiblemente temporal) y almacenarlo en su lugar? Luego, más adelante cuando sea necesario, puede llamar a FromHandle utilizando el HWND almacenado para obtener un CWnd. – Steg
Sí, eso estaría bien, el HWND será válido durante el tiempo de vida de la ventana. –
Excelente, aplaude Phil – Steg