Slimer软工课设日报-2016年7月1日

今天主要解决了全屏状态下按钮无法顺利点击的问题

起初我以为是程序运行代码过多导致的卡顿,多点几次才能顺利交互,后来多调试了几次发现是判定区的问题

全屏后本来按钮的判定区是按照窗体比例放大且移动到指定位置范围的,但实际全屏后所有按钮的判定区都向上偏移了,所以才导致点击原来的位置没有反映

原先的按钮的判定区的xy范围是根据背景的像素点加上当前的窗口大小换算的,具体换算函数如下:

double changex(int x) {
    return x*2.0 / WindowWidth -1;
}

double changey(int y) {
    return y*2.0 / WindowHeight-1;
}
坐标换算

此时的窗口大小WindowWidth和WindowHeight是包含了上面标题框的,所以后面有个-1

然而当用了全屏函数glutFullScreen()后,上面的标题框没了,也不算在当前窗口大小里了,自然所有按钮判定区都向上移动了

所以需要一个全屏标识符,来区分此时是窗口化还是全屏,来根据此时实际游戏画面内容的大小来改变窗口大小,具体更改了getWindowsSize()函数

void getWindowsSize() {                                    //记录当前窗口大小*                                    
    HWND windows = GetActiveWindow();                    //获取当前活动窗口句柄
    RECT rc;
    GetWindowRect(windows, &rc);                        //获取窗口大小信息
    
    if(Fullscreen==true){
        WindowHeight = rc.bottom - rc.top;                //改变当前窗口高度(全屏)
        WindowWidth = rc.right - rc.left;                    //改变当前窗口宽度
    }
    else {
        WindowHeight = rc.bottom - rc.top - 39;                //改变当前窗口高度(窗口化)
        WindowWidth = rc.right - rc.left - 16;                    //改变当前窗口宽度
    }
}
getWindowsSize()
原文地址:https://www.cnblogs.com/hesoyamlyf/p/5634222.html