• 【软件笔记】 ◆笔记·I◆ 各类冷门函数细解


    【软件笔记·I】 各类冷门函数细解


    ■题外话■

    总觉得作为一个志向远大的 coder (٩(◕‿◕。)۶),我觉得单单只会做题是不够的所以我开始尝试自己编写软件!初入道的我并不知道C++其实并不太适合编写软件……但是我决定开始尝试,那么写代码之前当然需要了解一些函数啊(幸好C++自带了一大堆函数)。
    于是我开始上网找资料。没想到这些函数竟然大多数都是“冷门函数”,很多都搜不到,经过大量实验,我终于找到了一些函数的使用技巧,这里和大家分享一下!


    ■冷门函数■

    1.MessageBox()

    • 头文件:"windows.h"
    • 作用:弹出一个窗口(在关闭这个窗口前,主程序处于暂停状态,不会执行之后的语句)
    • 使用方法:Message(HWND,LPCSTR,LPCSTR,UINT)
    • 返回值(int):不同按键返回不同值-"确定"=1,"取消"=2,"终止"=3,"重试"=4,"忽略"=5,"是"=6,"否"=7
    • UINT 是windows系统的提示窗属性——由C++头文件"windows.h"中的define宏定义,主要有以下类型:
      MB_COMPOSITE(终止提示) "终止"、"重试"、"忽略" 3个按钮;
      MB_APPLMODAL(普通) "确定" 按钮;
      MB_CUR_MAX(确认) "确定"、"取消" 2个按钮;
      MB_ICONASTERISK(提示) "确定" 按钮,带有 提示图标;
      MB_ICONERROR(错误) "确定" 按钮,带有 错误图标;
      MB_ICONEXCLAMATION(警告) "确认" 按钮,带有 警告图标;
      MB_ICONQUESTION(问题) "确认" 按钮,带有 问题图标;
      MB_RETRYCANCEL(重试提示) "重试"、"取消" 2个按钮;
      MB_RIGHT(右对齐窗口) "确定" 按钮;
      MB_RTLREADING(标题右对齐) "确定" 按钮;
      MB_USEGLYPHCHARS(判断) "是"、"否" 2个按钮;
      MB_YESNOCANCEL(带取消判断) "是"、"否"、"取消" 3个按钮;
    • HWND - 这个作者真的没有搞懂,但是可以用NULL来代替
    • LPCSTR 是C风格的字符串(字符数组),第一个是内容,第二个是标题,好像不能用中文字符
    • 示例:
    MessageBox(NULL,"Are you clever?","Title",MB_USEGLYPHCHARS);
    

    2.kbhit()

    • 头文件:"conio.h"
    • 作用:检测输入流是否为空(不一定是当前是否有按键!
    • 返回值(bool):不为空=true,空=false
    • 示例:
    while(true)
        if(kbhit())
            getch(),printf("1");
    /*这个程序在你每一次按键后都会输出1,但是输出1的个数取决于在系统返回值中的字符个数*/
    //eg: 'D'-输出“1”  'F3'-输出“11”  'Tab'-输出“1”  '大写锁定'-无输出
    
    • 警告:如果在kbhit()后不读入,将会一直返回true

    ■下面是一些自定义的函数■

    1.KEY_DOWN(VK_NONAME)

    • 用途:判断当前这一瞬间是否按下某一个特殊按键,包括持续按下
    • 定义方式:define 宏定义
    • 返回值:按下返回1,否则返回0
    • 头文件:"windows.h"
    • 代码:
    #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
    
    • VK_NONAME:
      一种系统常量,代表一个特殊按键(比如“F1”)
      常见的有 ①VK_F1~VK_F24 指 F1~F24;②VK_BACK 指 退格键(Backspace);③VK_SHIFT 指 上档键(Shift);④MOUSE_MOVED和MOUSE_EVENT 分别指 鼠标右键、鼠标左键;⑤MOUSE_WHEELED 指 鼠标中键(滚轮),“按下”不包括滚动滚轮
    • 注意:该函数运行速度特别快,比如运行下面程序时,按下一次可能会输出很多次,原因是检测到按下键的时间段内函数返回true
    • 示例:
    while(true)
    	if(KEY_DOWN(MOUSE_MOVED))
    		printf("1");
    

    2.gotoxy(int x,int y)

    • 用途:转到以程序面板左上角为原点的第x行、第y列(不是以窗口右上角为原点!
    • 定义方式:函数定义
    • 返回值:void
    • 头文件:"windows.h"
    • 代码:
    void gotoxy(int x,int y)
    {
    	COORD c;
    	c.X=y;c.Y=x;
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    
    • 注意:x,y由0开始
    • 示例:
    for(int i=0;i<10;i++)
        for(int j=0;j<10;j++)
            gotoxy(i,2*j),printf("%02d",i+j);
    
    • 运行效果:

    3.color(int a)

    • 用途:从下一个输出开始,以给定的颜色输出(不会直接改变窗口中所有的颜色)
    • 定义方式:函数定义
    • 返回值:void
    • 头文件:"windows.h"
    • 代码:
    void color(int a)
    {
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    }
    
    • a: 一个16进制数,共2位,第一位为字体颜色,第二位为背景颜色(eg:A8 是 亮绿为背景,深灰为字体颜色)
    • 示例:
    for(int i=0;i<16;i++) //字体
    	{
    		for(int j=0;j<16;j++) //背景
    			color(j*16+i),printf("@");
    		printf("
    ");
    	}
    
    • 运行效果:

    4.GetPos(POINT &pt)

    • 用途:获取鼠标在窗口中的位置(字符)
    • 定义方式:函数定义
    • 返回值:void(获取结果储存在pt里)
    • 头文件:"windows.h"
    • 代码:
    void GetPos(POINT &pt)
    {
    	HWND hwnd=GetForegroundWindow();
    	GetCursorPos(&pt);
    	ScreenToClient(hwnd,&pt);
    	
    	pt.y=pt.y/16,pt.x=pt.x/8;
    	//这一段是获取鼠标当前处于窗口中第几个字符
    	//因为默认设定一个字符高16像素,宽8像素,将横纵坐标分别除去8、16就可以得到位置
    	//也可以选择删除这一段,就可以获取像素点的位置
    }
    
    • 注意:函数仅返回当前窗口下鼠标的位置,即使鼠标不在程序运行窗口,而在其他打开的窗口中,也会返回在那一个窗口的位置
    • 示例:
    #include<conio.h>
    #include<cstdio>
    #include<iostream>
    #include<windows.h>
    using namespace std;
    void GetPos(POINT &pt)
    {
    	HWND hwnd=GetForegroundWindow();
    	GetCursorPos(&pt);
    	ScreenToClient(hwnd,&pt);
    	pt.y=pt.y/16,pt.x=pt.x/8;
    }
    void gotoxy(int x,int y)
    {
    	COORD c;
    	c.X=y;c.Y=x;
    	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    int main()
    {
    	gotoxy(10,5);
    	printf("D");
    	while(true)
    	{
    		POINT mouse;
    		GetPos(mouse);
    		if(mouse.y==10 && mouse.x==5)
    			return 0;
    	}
    }
    /*只要鼠标移动到D的位置就结束程序*/
    

    The End

    Thanks for reading!

    - Lucky_Glass

    欢迎转载٩(๑❛ᴗ❛๑)۶,请在转载文章末尾附上原博文网址~
  • 相关阅读:
    MySql和oracle的不同
    Session的有效期设置
    WebSocket和WebRtc的一些心得
    Spring事务管理
    Tomcat下使用war包发布项目
    Log4j记日志功能
    javascript typeof和instanceof
    js模块化的意义
    有关call和apply的理解。
    h5滑动插件(包含幻灯片滑动逻辑)
  • 原文地址:https://www.cnblogs.com/LuckyGlass-blog/p/9139399.html
Copyright © 2020-2023  润新知