大家好,我正在使用自己的界面制作应用程序,但是没有关于如何更改使用 glfw 创建的窗口样式的说明。因此,我决定通过 WinApi 修改窗口。但从未设法使用 glfw 获得窗口句柄。我这样做是为了在创建窗口后立即获得活动窗口的句柄。这可以禁用框架,但理论上,如果在创建窗口和应用窗口属性之间,由于某种原因,任何其他窗口变为活动状态,则该属性将应用于活动窗口。
问题是如何使用 GLFW 获取句柄。所以它是我创建的窗口的 100% 句柄。我找到了这个命令,glfwGetWin32Window(window)但是 IDE 告诉我这样的命令不存在。
这是有效的代码,但方式不正确。
C++、视觉工作室 2010、glfw、WinApi。
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glfw3.lib")
#pragma comment(lib, "glew32s.lib")
#include <iostream>
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
#include <GLFW/glfw3native.h>
// GLFW
#include <GLFW/glfw3.h>
#include<Windows.h>
int main()
{
// Init GLFW
glfwInit();
// Set all the required options for GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(700, 500, "OpenGL", nullptr, nullptr);
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
glewInit();
//HWND ds = FindWindow("Notepad", NULL); //Получит дескриптор пно названию возможно по классу?
HWND ds = GetForegroundWindow(); //Получить дескриптор активного окна
std::cout<<ds;
//Сделать окно прозрачным
/*SetWindowLong(ds, GWL_EXSTYLE,
GetWindowLong(ds, GWL_EXSTYLE) | WS_EX_LAYERED);
// Делаем окно на 70% не прозрачным
::SetLayeredWindowAttributes(ds, 0, (255 * 70) / 100, LWA_ALPHA);*/
//HWND hWnd = glfwGetWin32Window(window); Не работает Отсуцтвует команда
SetWindowLongPtr(ds, GWL_STYLE, WS_POPUP | WS_VISIBLE); //Вимкнути рамки
// HWND hWnd = GetForegroundWindow(); //Получить дескриптор активного окна
// Game loop
while (!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
glClearColor(0.5, 0.5, 0.7, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
// Terminate GLFW, clearing any resources allocated by GLFW.
glfwTerminate();
return 0;
}
您需要所有这些来移除窗框吗?
在创建窗口之前: