【C++】从零开始的CS:GO逆向分析2——配置GLFW+IMGUI环境并创建透明窗口( 二 )
至此 , 环境配置完毕
需要补充几个用得到glfw代码:让鼠标事件透过创建的窗口glfwWindowHint(GLFW_MOUSE_PASSTHROUGH, GLFW_TRUE);让窗口透明glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, true);置顶窗口glfwWindowHint(GLFW_FLOATING, true);禁止更改窗口大小glfwWindowHint(GLFW_RESIZABLE, false);窗口最大化glfwWindowHint(GLFW_MAXIMIZED, true);设置没有标题栏glfwSetWindowAttrib(window, GLFW_DECORATED, false);删除掉没有用的代码 , 删掉界面显示的代码 , 设置窗口透明 , 设置窗口最大化 , 设置鼠标通过 , 设置窗口不允许resize , 就可以得到一个透明的窗口 , 即下面的代码
#include <stdio.h>#include<Windows.h>#include <GLFW/glfw3.h>#include "imgui/imgui.h"#include "imgui/imgui_impl_glfw.h"#include "imgui/imgui_impl_opengl3.h"#include "imgui/alifont.hpp"static void glfw_error_callback(int error, const char* description){fprintf(stderr, "Glfw Error %d: %s\n", error, description);}int main(){glfwSetErrorCallback(glfw_error_callback);if (!glfwInit())return 1;GLFWmonitor *monitor = glfwGetPrimaryMonitor();//###########################设置窗口###########################const char* glsl_version = "#version 130";int Height = glfwGetVideoMode(monitor)->height;int Width = glfwGetVideoMode(monitor)->width;glfwWindowHint(GLFW_FLOATING, true);glfwWindowHint(GLFW_RESIZABLE, false);glfwWindowHint(GLFW_MAXIMIZED, true);glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, true);glfwWindowHint(GLFW_MOUSE_PASSTHROUGH, GLFW_TRUE);//###########################设置窗口###########################GLFWwindow* window = glfwCreateWindow(Width, Height, "titile", NULL, NULL);if (window == NULL)return 1;glfwSetWindowAttrib(window, GLFW_DECORATED, false); //设置没有标题栏ShowWindow(GetConsoleWindow(), SW_HIDE);glfwMakeContextCurrent(window);glfwSwapInterval(1);IMGUI_CHECKVERSION();ImGui::CreateContext();ImGuiIO& io = ImGui::GetIO(); (void)io;ImGui::StyleColorsDark();ImGui_ImplGlfw_InitForOpenGL(window, true);ImGui_ImplOpenGL3_Init(glsl_version);while (!glfwWindowShouldClose(window)){glfwPollEvents();glClear(GL_COLOR_BUFFER_BIT);ImGui_ImplOpenGL3_NewFrame();ImGui_ImplGlfw_NewFrame();ImGui::NewFrame();ImGui::Render();int display_w, display_h;glfwGetFramebufferSize(window, &display_w, &display_h);glViewport(0, 0, display_w, display_h);ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());glfwSwapBuffers(window);}// CleanupImGui_ImplOpenGL3_Shutdown();ImGui_ImplGlfw_Shutdown();ImGui::DestroyContext();glfwDestroyWindow(window);glfwTerminate();return 0;}至此 , 已经配置好了glfw+imgui的环境 , 并且创建了透明窗口 , 下一章用第一篇里的偏移值做点事
经验总结扩展阅读
- 成语填空骄必
- 苏州北站到苏州站有多远
- 魔女宅急便是宫崎骏的吗
- 四十几岁穿衣搭配
- 吃早饭会发胖吗
- 写作手法意象什么意思
- 形容长河的词语有哪些
- 一只想飞的猫作者是谁
- 核桃不补脑吗
- OPPOA57电池不耐用怎么办