【软件笔记】 ◆笔记·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("\n");
}
- 运行效果:
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
【软件笔记】 ◆笔记·I◆ 各类冷门函数细解的更多相关文章
- (笔记)Linux下的ioctl()函数详解
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围.写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑. ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- Flutter学习笔记(4)--Dart函数
如需转载,请注明出处:Flutter学习笔记(4)--Dart函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象,函数可以像参数一样传递给其他函数,这样便于做回调处理: ...
- 数据结构笔记2(c++)_跨函数使用内存的问题
预备知识 1.所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 //1.cpp 所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 # include <stdi ...
- Objective-C学习笔记 利用协议实现回调函数
来源:http://mobile.51cto.com/iphone-278354.htm Objective-C学习笔记 利用协议实现回调函数是本文要介绍的内容,主要是实现一个显示文字为测试的视图,然 ...
- [转帖]Linux学习笔记之rpm包管理功能全解
Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
随机推荐
- 几种常见的排序算法Java实现总结
public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...
- redis开机启动,有密码
#!/bin/sh # chkconfig: # description: Start and Stop redis REDISPORT= EXEC=/usr/local/redis/src/redi ...
- Emacs学习笔记1
Emacs笔记-Emacs基本的文本操作 使用命令时要在minibuffer缓冲区中 关于文件 注意 在对单词的操作中C开头的控制范围要比M开头的控制范围要下 对于文件的撤销操作, 不要使用C-x, ...
- GitKraken使用教程-基础部分(6)
4) 放弃本次文件的改动 有些情况下,由于更改代码造成了编译无法通过等错误时,想要放弃这次对文件的修改,将文件还原成上一次提交后的状态,一种简单的恢复文件的方法就是,在Unstaged Files 列 ...
- HDU 5336——XYZ and Drops——————【广搜BFS】
XYZ and Drops Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- Entity Framework Many to Many Relation Mapping(Entity Framework多对多关系映射)
通常我们在做数据库设计时都会有两张表是多对多关系的时候,在数据库做多对多关系时候我们通常通过中间关联表来处理,那我们现在在EF中是如何处理的呢? 假设我们有如下关系,用户(User)包含多个角色(Ro ...
- idea创建Javaweb项目
1.Javaweb项目结构 1.1修改生成.class文件的位置为WEB-INF下的classes: 生成的.class文件位置: 1.2 设置第三方jar包添加位置:
- Python 连接Sql Server数据库 MSSql
Python 想要和MSSql数据库进行交互,首先要下载名为"pymssql"的包,然后import该包即可. 地址:https://pypi.python.org/pypi/py ...
- C# params 动态参数
public delegate void Action(params object[] args); 再简单的东西都要强迫自己记录了,前段时间硬盘坏了,资料全没了,也没有备份,太痛苦了,那么多资料全没 ...
- (转)Entity Framework4.1实现动态多条件查询、分页和排序
原文:http://www.cnblogs.com/ahui/archive/2011/08/04/2127282.html EF通用的分页实现: 1 2 3 4 5 6 7 8 9 10 11 12 ...