首页 新闻 会员 周边

c++如何获取鼠标在控制窗口的窗口中位置?

0
悬赏园豆:200 [待解决问题]

各位神犇们,小弟想问问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

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

秘境KD的主页 秘境KD | 初学一级 | 园豆:2
提问于:2024-02-03 13:35
< >
分享
所有回答(1)
0

HWND h=GetForegroundWindow();
这个语句最好放到 main函数里面, 全局对象初始化时, 主窗体可能还没有创建处理啊, 所以这里可能会有问题
或者也可以尝试屏蔽或调试 ScreenToClient

Yofoo | 园豆:394 (菜鸟二级) | 2024-02-15 00:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册