C语言控制台内获取鼠标左键点击的位置有问题,程序是在某论坛copy的,求大神指点 35

贴代码#include<stdio.h>#include<Windows.h>#include<conio.h>HANDLEhandle_in;HANDLEhandle_... 贴代码
#include <stdio.h>
#include <Windows.h>
#include <conio.h>

HANDLE handle_in;
HANDLE handle_out;
CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体

void DisplayMousePosition(COORD pos); //显示鼠标所在位置

void gotoxy(int x, int y); //将光标移到坐标为(x,y)的位置

int main()
{

INPUT_RECORD mouserec; //定义输入事件结构体
DWORD res; //用于存储读取记录
COORD pos; //用于存储鼠标当前位置
COORD size = {80, 25}; //窗口缓冲区大小
handle_in = GetStdHandle(STD_INPUT_HANDLE); //获得标准输入设备句柄
handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
SetConsoleScreenBufferSize(handle_out, size); //设置窗口缓冲区大小
for (;;)
{
ReadConsoleInput(handle_in, &mouserec, 1, &res); //读取输入事件
pos = mouserec.Event.MouseEvent.dwMousePosition; //获得当前鼠标位置
gotoxy(0, 24); //在第25行显示鼠标位置
DisplayMousePosition(pos); //显示鼠标位置
if (mouserec.EventType == MOUSE_EVENT) //如果当前为鼠标事件
{
gotoxy(pos.X, pos.Y);
//单击鼠标左键,输出字符A
if (mouserec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
putchar('A');
}
//单击鼠标右键,输出字符B
if (mouserec.Event.MouseEvent.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
{
putchar('B');
}
//双击退出
if (mouserec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
{
break;
}
}
}
CloseHandle(handle_out);
CloseHandle(handle_in);
system("pause");
return 0;
}

void DisplayMousePosition(COORD pos)
{
COORD dis = {0, 24}; //在第24行显示鼠标位置
WORD att = FOREGROUND_GREEN | FOREGROUND_INTENSITY; //文本属性
GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
printf("X = %3d, Y = %3d", (int)pos.X, (int)pos.Y);
FillConsoleOutputAttribute(handle_out, att, 16, dis, NULL); //填充文本属性
return;
}

void gotoxy(int x, int y)
{
COORD pos = {x, y};
SetConsoleCursorPosition(handle_out, pos);
}
程序可以运行,但是如果选择不调试运行,就没办法接收到鼠标点击,如果选择调试运行,就可以实现,而且生成的.exe文件,加了system("pause");也停不下来,发布版和调试版都试过了,不明白问题到底出在哪里,希望在不调试运行的时候能够达到效果,新人,求大神指点。
大概明白了,生成的exe文件试了一下,是可以用的。刚刚是我找错了文件夹
展开
 我来答
匿名用户
2016-07-24
展开全部
鼠标事件,需要窗口接收 。。。。。。。。。。。。
追问
是接收句柄么?输入输出句柄都有,问题是为什么在调试运行的时候才有效果,开发环境是win7下vs2010
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2016-07-25 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7777万
展开全部
这个程序应该是用在win32桌面应用程序里的,不是控制台。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式