秘境KD 2024-02-02 22:19 采纳率: 66.7%
浏览 13

想问问c++中为啥这个检测鼠标在dev-c++的运行窗口中点击同一位置从dev-c++中运行出来窗口直接点的和在它运行好的.exe文件窗口中运行的结果不一样呢。

各位神犇们,小弟想问问c++中为啥这个检测鼠标在dev-c++的运行窗口中点击同一位置从dev-c++中运行出来窗口直接点的和在它运行好的.exe文件窗口中运行的结果不一样呢。下面是我的代码,我就是按照点我这个网址的做的

#include <windows.h>  
#include <bits/stdc++.h>

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void fun(string s){
    for(int i=0;i<s.size();i++){
        std::cout<<s[i];
        Sleep(3);
    }
} 
int color(int c)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); 
    return 0;
}
void gotoxy(HANDLE hout,int x,int y){
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(hout,pos);
}
POINT p;
HWND h=GetForegroundWindow();
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
void zhuyemian(HANDLE hout){
    color(14);
    int i,j;
    for(i=3;i<=26;i++){
        for(j=22;j<=90;j++)
        {
            gotoxy(hout,j,i);
            if(i==3||i==26)
            {
                cout << "-";
            }
            else if(j==22||j==90)
            {
                cout << "|";
            }
        }
    }
    
    gotoxy(hout,30,8);
    cout<< "用";
    
}
int main() {
    zhuyemian(hout);
    while(1) {                              
        if(KEY_DOWN(VK_LBUTTON)) { 
            POINT p;
            GetCursorPos(&p);
            ScreenToClient(h,&p);               //获取鼠标在窗口上的位置
            printf("key down (%d,%d)\n",p.x,p.y);
        }
        Sleep(100);   
    }
    return 0;
}


下面这个是在dev-c++中直接运行源代码出来的(我点击了“用”这个字)

img


下面这个是在它之前编译过的.exe文件中运行的(依然点击了“用”这个字)

img

我感觉即使点的位置稍有差异但都是点的这个字也不应该出现差错这么大啊!这是为啥呢,看到的务必帮我改成一个正确的代码,谢谢神犇(扣头中)。

  • 写回答

2条回答 默认 最新

  • [PE]经典八炮 2024-02-03 07:47
    关注

    原因可能是GetForegroundWindow();获取到的句柄不同
    你可以用GetConsoleWindow代替
    但我强烈建议你不要用控制台写图形界面程序,学学UI编程不好吗

    评论

报告相同问题?

问题事件

  • 修改了问题 2月2日
  • 创建了问题 2月2日

悬赏问题

  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 RPG游戏架构设计和开发方法
  • ¥15 python 计算股权结构
  • ¥30 为什么会失败呢,该如何调整
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变