C在控制台上实现鼠标画图功能

#include <windows.h>
#include <stdio.h>
#include <string.h>
HANDLE hOut;
HANDLE hIn;
void ClearScreen(void);
void DispMousePos(COORD pos); // 在第24行显示鼠标位置
int main()
{
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
    hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄
    WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE ;
    // 背景是蓝色,文本颜色是黄色
    SetConsoleTextAttribute(hOut, att);
    ClearScreen(); // 清屏
    INPUT_RECORD mouseRec;
    DWORD state = 0, res;
    COORD pos = {0, 0};
    //不断对鼠标这个事件进行检测
    while(1)
    {
        ReadConsoleInput(hIn, &mouseRec, 1, &res);
        if (mouseRec.EventType == MOUSE_EVENT)
        {
            if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
               // break; // 双击鼠标退出循环
             ClearScreen();
            pos = mouseRec.Event.MouseEvent.dwMousePosition;
            //左按键
            if (mouseRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
                FillConsoleOutputCharacter(hOut, 'A', 1, pos, NULL);
        }
    }
    pos.X = pos.Y = 0;
    SetConsoleCursorPosition(hOut, pos); // 设置光标位置
    CloseHandle(hOut); // 关闭标准输出设备句柄
    CloseHandle(hIn); // 关闭标准输入设备句柄
}
void DispMousePos(COORD pos) // 在第24行显示鼠标位置
{
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    GetConsoleScreenBufferInfo( hOut, &bInfo );
    COORD home = {0, 24};
    WORD att0 = BACKGROUND_INTENSITY ;
    FillConsoleOutputAttribute(hOut, att0, bInfo.dwSize.X, home, NULL);
    FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X, home, NULL);
    char s[20];
    sprintf(s,"X = %2lu, Y = %2lu",pos.X, pos.Y);
    SetConsoleTextAttribute(hOut, att0);
    SetConsoleCursorPosition(hOut, home);
    WriteConsole(hOut, s, strlen(s), NULL, NULL);
    SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性
    SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition); // 恢复原来的光标位置
}
void ClearScreen(void)
{
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    GetConsoleScreenBufferInfo( hOut, &bInfo );
    COORD home = {0, 0};
    unsigned long size = bInfo.dwSize.X * bInfo.dwSize.Y;
    FillConsoleOutputAttribute(hOut, bInfo.wAttributes, size, home, NULL);
    FillConsoleOutputCharacter(hOut, ' ', size, home, NULL);
}
时间: 2024-10-30 15:26:29

C在控制台上实现鼠标画图功能的相关文章

新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值

负载均衡作为业务系统的公网入口,承载海量访问请求的分发,常常也是DDoS攻击的对象,因此阿里云提供了免费的DDoS防护(云盾),详情可以参考之前的博文<聊一聊负载均衡SLB的DDoS防护>. 由于很多用户可能并不知道负载均衡有DDoS防护的功能,导致DDoS防护成为了一把双刃剑,在防护DDoS攻击的同时,也偶有发生正常业务被清洗甚至黑洞的情况.现在SLB的控制台上可以直接查看SLB的DDoS防护阈值,将能够更加有效的防止正常业务被清洗的情况发生,鼠标移动到云盾小图标上,即可看到相关阈值,见下图

HTML Canvas 鼠标画图

原文:HTML Canvas 鼠标画图 原文来自:http://www.williammalone.com/articles/create-html5-canvas-javascript-drawing-app(已被墙) 译文: http://fatkun.com/2011/02/html5-canvas-paint.html 我也不打算全部翻译了-大部分也看的懂,就算看不懂,代码也能看懂-.o(╯□╰)o原谅我非常懒-很久没写博客了. -------以下是一个简单的例子------------

利用Atlas库为Web页面加入鼠标拖放功能

web|鼠标|页面 摘要 有时,AJAX看上去为web页面平添了一分神秘的色彩.如果页面能够支持一些小件(例如图像和文本块)的拖放操作,那么,这明显会使访问者眼前一亮.在本文中,你会看到,利用微软Atlas你也会非常容易地在客户端实现类似的鼠标拖放功能. 一. 引言 你能够把一个相当酷的特征添加到你的Web应用程序中:使用户能够定制自己的页面的外观感觉.并且,在经常情况下,用户都喜欢重新安排页面部分以适合他们自己的查看习惯.不妨让我们设想这样的情景:用户导航到某一个网站,能够选择其中的一部分(例

Firefox支持鼠标拖曳功能吗

  Firefox安装 Super DragAndGo 扩展即可实现鼠标拖曳功能.另外,也可以用其他的鼠标手势扩展来实现,比如All-in-One Gestures.

win7系统使用画图功能去除图片水印的方法

  今天本教程小编和大家分享一篇win7系统使用画图功能去除图片水印的方法,我们在网上看到有喜欢的图片会保存到电脑上,但是发现图片上有水印,虽然网上有很多关于去除水印的方法,但是很多都要使用到第三方软件,最常见PS,为去除一张图片下载一款软件比较麻烦.有什么方法可以不用任何软件去除水印的呢?方法当然是有的,我们可以使用win7系统自带的画图功能来去除图片水印,感兴趣的用户来看看具体设置方法. 步骤如下: 1.选择一张你需要去除水印的图片; 2.打开Windows画图工具; 3.将你下载的图片拽入

如何在win7旗舰版电脑中取消键盘或鼠标唤醒功能?

  进入win7 64位旗舰版iso系统之后,咱们电脑中新增了一个功能,叫做睡眠功能,这个是什么功能呢?当咱们特定的时间内不再使用电脑的时候,咱们电脑就会自动的黑屏,进入到睡眠状态,而需要重新唤醒win7旗舰版系统的话,咱们只需要动一下鼠标或者是直接按下键盘上的一个按键就可以了,这样咱们就又可以正常的使用win7旗舰版电脑了,但是另一方面,咱们也可以对这个进行设置,取消键盘或鼠标唤醒功能,下面,小编就来分享一下操作的方法吧! 1.首先,咱们同时按下win7旗舰版电脑键盘上的win+R快捷键打开电

java问题分析-分析如下Java代码,如果想在控制台上输出“B类的test()方法”,则在主函数应填入( )

问题描述 分析如下Java代码,如果想在控制台上输出"B类的test()方法",则在主函数应填入( ) 分析如下Java代码,如果想在控制台上输出"B类的test()方法",则在主函数应填入( )class A {public void test() { System.out.println(""A类的test()方法"");}}class B extends A {public void test() { System.ou

.NET Core下的日志(3):如何将日志消息输出到控制台上

当我们利用LoggerFactory创建一个Logger对象并利用它来实现日志记录,这个过程会产生一个日志消息,日志消息的流向取决于注册到LoggerFactory之上的LoggerProvider.说的更加具体一点,日志消息的归宿取决于注册到LoggerFactory的LoggerProvider究竟会提供怎样的Logger.微软提供了一系列原生的LoggerProvider,我们先来认识一下将控制台作为日志输出目的地的ConsoleLoggerProvider.ConsoleLoggerPr

java的监测工具jprofiler是否有控制原程序输入的功能?

问题描述 java的监测工具jprofiler是否有控制原程序输入的功能? 在下目前正在使用jprofiler集成eclipse做一些java代码的监测工作,我们知道对于不同的输入程序对资源的使用是不同的,为了对代码进行全面的分析,我必须手动设计各种不同的输入,重新运行程序再进行监测.jprofiler本身有没有不通过原程序直接进行输入的功能?