事件回调包括键盘、鼠标、滚动、游标、游戏手柄等,具体资料请参考
7.1 键盘
GLFW_KEY_NUM_LOCK 、GLFW_KEY_CAPS_LOCK 、GLFW_KEY_BACKSPACE、GLFW_KEY_ENTER、GLFW_KEY_TAB、GLFW_KEY_A、GLFW_KEY_Z等等,具体资料请参考GLFW:键盘键令牌
7.2 鼠标
GLFW_MOUSE_BUTTON_LEFT、GLFW_MOUSE_BUTTON_RIGHT 、GLFW_MOUSE_BUTTON_MIDDLE 具体资料请参考GLFW: Mouse buttons
7.3 标准光标
7.4 控制键
GLFW_MOD_SHIFT、GLFW_MOD_CONTROL、 GLFW_MOD_ALT、 GLFW_MOD_CAPS_LOCK、 GLFW_MOD_NUM_LOCK具体资料请参考GLFW:控制键标识
控制键也是可以设置的,glfwSetInputMode(GLFWwindow* window,int mode ,int value)
7.4 其它
示例代码如下:
#include <iostream>
#include <GLFW/glfw3.h>
using namespace std;
const int WIDTH = 800 ,HEIGHT =600;
//错误处理
static void error_callback(int code,const char* description)
{
cout<<"错误代码:"<<code << " 错误内容:"<<description <<endl;
}
//键盘事件
static void key_callback(GLFWwindow* window,int key,int scancode,int action ,int mods)
{
if(key == GLFW_KEY_W);//是否按下W键
if(action == GLFW_PRESS);//按压行为
if(action == GLFW_RELEASE);//松开行为
if(mods == GLFW_MOD_CONTROL);//control
std::cout << "按下了:" << key << std::endl;
std::cout << "action:" << action << std::endl;
std::cout << "mods" << mods << std::endl;
if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
{
glfwSetWindowShouldClose(window,GLFW_TRUE);
return;
}
cout<<mods <<endl;
switch(mods)
{
case GLFW_MOD_CONTROL:
cout<<"您按住了CONTROL键"<<endl;
break;
case GLFW_MOD_ALT:
cout<<"您按住了ALT键"<<endl;
break;
case GLFW_MOD_SHIFT:
cout<<"您按住了SHIFT键"<<endl;
break;
case GLFW_MOD_SUPER:
cout<<"您按住了SUPER键"<<endl;
break;
}
}
//鼠标事件
static void mousebutton_callback(GLFWwindow* window,int button,int action,int mods)
{
switch(action)
{
case GLFW_PRESS:
switch (button )
{
case GLFW_MOUSE_BUTTON_LEFT:
cout<<"Mouse left button pressed"<<endl;
break;
case GLFW_MOUSE_BUTTON_RIGHT:
cout<<"Mouse right button pressed"<<endl;
break;
case GLFW_MOUSE_BUTTON_MIDDLE:
cout<<"Mouse middle button pressed"<<endl;
break;
default:
cout<<"Mouse button pressed"<<endl;
break;
}
break;
case GLFW_RELEASE:
switch (button )
{
case GLFW_MOUSE_BUTTON_LEFT:
cout<<"Mouse left button released"<<endl;
break;
case GLFW_MOUSE_BUTTON_RIGHT:
cout<<"Mouse right button released"<<endl;
break;
case GLFW_MOUSE_BUTTON_MIDDLE:
cout<<"Mouse middle button released"<<endl;
break;
default:
cout<<"Mouse button released"<<endl;
break;
}
break;
//case GLFW_REPEAT:
//cout<<"键重复按下"<<endl;
//break;
default:
break;
}
}
//滚动回调。鼠标滚轮、触摸板手势
void scroll_callback(GLFWwindow* window,double xoffset,double yoffse)
{
cout<<"滚动啦"<<endl;
}
int main(void)
{
//SetConsoleOutputCP(65001); // 设置控制台输出为 UTF-8 编码
system("chcp 65001");
glfwSetErrorCallback(error_callback);
GLFWwindow * window ;
int ma,mi,rev;
glfwGetVersion(&ma,&mi,&rev);
cout<< "glfw版本:" << ma << "." << mi << "." <<rev<<endl;
const char *sVer=glfwGetVersionString();
cout<< "glfw版本详细信息:" << sVer<<endl;
//初始化GLFW
if(!glfwInit()) cout<< "Failed to Init GLFW." << endl;
int nPlatform = glfwGetPlatform();
cout<<"glfw平台:"<< nPlatform;
switch (nPlatform){
case GLFW_PLATFORM_WIN32://393217
cout << " is GLFW_PLATFORM_WIN32" ;
break;
case GLFW_PLATFORM_COCOA ://393218
cout << " is GLFW_PLATFORM_COCOA" ;
break;
case GLFW_PLATFORM_WAYLAND://323219
cout << " is GLFW_PLATFORM_WAYLAND" ;
break;
case GLFW_PLATFORM_X11://393220
cout << " is GLFW_PLATFORM_X11" ;
break;
case GLFW_PLATFORM_NULL://393221
cout << " is GLFW_PLATFORM_NULL" ;
break;
default:
break;
}
cout << endl;
//创建窗口
window = glfwCreateWindow(WIDTH,HEIGHT,"Hello GLFW",NULL,NULL);
if(!window)
{
cout<< "Failed to create GLFW window." << endl;
glfwTerminate();
return -1;
}
glfwSetWindowTitle(window,u8"窗口标题在这里");
glfwSetKeyCallback(window,key_callback);
glfwSetMouseButtonCallback(window,mousebutton_callback);
glfwSetScrollCallback(window,scroll_callback);
//将当前窗口设为主线程上下文
glfwMakeContextCurrent(window);
while(!glfwWindowShouldClose(window))
{
//设置窗口清除颜色
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}