es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo incrustar una ventana de GLFW en el marco de la ventana de WinAPI?

Tengo el siguiente código funcional, que adjunta el controlador OpenGL a una ventana existente de WinAPI. Funciona bien y puedo obtener correctamente las propiedades (altura y ancho, por ejemplo) del diálogo de WinAPI llamando a la función glfwGetWindowSize(glfwWnd, &windowWidth, &windowHeight); de openGL.

LPCTSTR WindowName = "Untitled - Notepad";

HWND hwnd = FindWindow("Notepad", WindowName);    

if (!glfwInit()) {
    return -1;
}

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

GLFWwindow* window = glfwCreateWindow(640, 480, "Mi Título", NULL, NULL);

GLFWwindow* glfwWnd = glfwAttachWin32Window(hwnd, window);

GLint windowWidth, windowHeight;
glfwGetWindowSize(glfwWnd, &windowWidth, &windowHeight);

Pero lo que realmente quiero es que la ventana “Mi Título” esté incrustada dentro del marco de la ventana de Notepad. Lo cual no está sucediendo, ya que todavía son dos ventanas separadas. ¿Hay alguna forma de lograr esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para incrustar la ventana de OpenGL dentro del marco de la ventana de Notepad, deberá crear una ventana secundaria dentro de la ventana de Notepad y luego adjuntar el contexto de OpenGL a esa ventana secundaria. Esto se puede lograr creando una nueva ventana con un estilo de ventana específico, utilizando el mismo proceso que se utiliza para crear una ventana regular, pero con algunos pasos adicionales.

    En primer lugar, deberá obtener el identificador de la ventana principal utilizando FindWindow() u alguna función similar, como ya ha hecho anteriormente. Luego, deberá crear una ventana secundaria dentro de esta ventana principal, con el estilo de ventana adecuado. Puede hacer esto utilizando la función CreateWindowEx(), especificando el estilo WS_CHILD.

    Una vez que se haya creado la ventana secundaria, puede adjuntar el contexto de OpenGL a ella, utilizando el mismo método que antes, llamando a glfwAttachWin32Window() con el identificador de la ventana secundaria.

    Tenga en cuenta que deberá tener cuidado de manejar adecuadamente la posición y el redimensionamiento de la ventana secundaria dentro de la ventana principal, para asegurarse de que esté posicionada y redimensionada correctamente. Es posible que deba responder a los mensajes de ventana como WM_SIZE y WM_MOVE para lograr esto.

    En resumen, los pasos básicos requeridos para lograr la incrustación de una ventana de OpenGL dentro de una ventana de WinAPI son los siguientes:

    1. Encontrar el identificador de la ventana principal utilizando FindWindow() u alguna función similar.
    2. Crear una nueva ventana secundaria utilizando CreateWindowEx(), con el estilo de ventana adecuado.
    3. Inicializar GLFW y crear una ventana de OpenGL como antes.
    4. Llamar a glfwAttachWin32Window() con el identificador de la ventana secundaria para adjuntar el contexto de OpenGL a ella.

Comments are closed.