GLFW按键及鼠标事件等

事件回调包括键盘、鼠标、滚动、游标、游戏手柄等,具体资料请参考

GLFW: Input reference

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 标准光标

GLFW:标准光标形状

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 其它

自己从这里归纳吧 GLFW:输入基准


 

示例代码如下:

#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;
    
}

源码下载glfw的相关事件回调资源-优快云文库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值