Después de que vb configura un programa como un subformulario de otro programa a través de un identificador, el identificador cambia ¿Cómo obtengo el nuevo identificador del programa en el formulario principal?
También tengo varias pruebas para demostrar que estás equivocado, como el siguiente código: Private?Declare?Function?SetParent?Lib?"user32"?(ByVal?hWndChild?As?Long,?ByVal ?hWndNewParent?As ?Long)?As?Long
¿Privado?Declarar?Función?FindWindow?Lib?"user32"?FindWindowA"?(ByVal?lpClassName?As?String,?ByVal?lpWindowName?As ?String)? As?Long
Dim?oParent?As?Long, ?npad?As?Long?'oParent es el identificador de la ventana principal original, npad es el identificador del bloc de notas
Dim?npad?As ?Long?'oParent es el identificador de la ventana principal original, npad es el identificador del Bloc de notas
Private?Sub?Command1_Click()
Shell?"notepad.exe" ,?vbNormalFocus'Abrir Bloc de Notas
Fin?Sub
Privado?Sub?Command2_Click()
Privado?Sub?Command2_Click()
Shell?"Notepad. exe", npad?Click()
npad?=?FindWindow(vbNullString,?" ¿Untitled? -? Notepad")?Obtener el identificador del Bloc de notas
oParent?=?SetParent( npad,?Me.hWnd) 'Establecer el Bloc de notas como su propia subventana
End?Sub
Privado?Sub?Command3_Click()
SetParent? npad,?oParent? 'Restaurar el Bloc de notas como ventana de escritorio. Tenga en cuenta que el identificador utilizado sigue siendo el mismo.
End?Sub
¡La conclusión es que cuando cambia! una ventana Cuando un formulario se utiliza como subformulario de otro formulario, el identificador del formulario no cambiará. Debido a que el identificador es el "ID" único del formulario en la memoria, si se puede cambiar a voluntad, el sistema operativo lo hará. no podrá controlarlo de manera efectiva.
La única situación en la que se cambiará el identificador es descargar primero el formulario y luego cargarlo. Esto equivale a volver a crear una nueva ventana, pero es la original. La identidad del subformulario también se liberará automáticamente.
Vale la pena señalar que cuando convierte un formulario en un formulario secundario de otro formulario, no puede encontrarlo en el escritorio a través de la ventana Buscar, debe encontrar su nuevo formulario principal y luego recorrer sus subformularios hasta encuéntrelo, preferiblemente usando la ventana Buscar Ex.