drawerror是怎么实现的?
鼠标后面跟着出现错误图标,这种效果叫drawerror。今天就来讲讲drawerror是如何实现的。
drawerror其实调用了一个WindowsAPI——drawicon,它的效果是在指定位置画出一个图标。drawicon有4个参数,第一个我们先不管他,填NULL就行了。第二第三个参数是xy坐标。第四个参数是图标,一个HICON变量。
现在的问题是:我们该如何获取鼠标指针的xy坐标呢?这里我们可以用GetCursorPos配合POINT类型的变量。首先定义POINT变量p,然后再把p的指针传给GetCursorPos,大概是这样:
// C++
POINT p;
GetCursorPos(&p);
现在p.x就是鼠标的x坐标,p.y就是鼠标的y坐标了。
第二个问题:error图标去哪里找呢?
Windows预定义了一些图标供我们开发者使用,分别是:
IDI_ERROR 错误图标
IDI_WARNING 感叹号
IDI_QUESTION 问号
IDI_INFORMATION 信息图标
IDI_APPLICATION 默认应用程序图标
IDI_SHIELD 安全防护罩图标(这个图标有亿些奇怪,DEV-C++直接使用这个会报错,可以写 MAKEINTRESOURCE(32518) )
加载图标就是LoadIcon(0,/*图标的名字*/);
好了,可以开始敲代码了:
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
signed main()
{
ShowWindow(GetConsoleWindow(),SW_HIDE); // 这个函数没讲过,反正就是隐藏自己的控制台窗口
POINT p;
while (1)
{
GetCursorPos(&p);
DrawIcon(GetDC(0),p.x,p.y,LoadIcon(0,IDI_ERROR)); // 这里也可以改成其他图标,不过得改个名字,比如drawinformation之类的
Sleep(10);
}
return 0;
}
当然啦,6个图标肯定不够我们玩,那么还有其他图标吗?
答案是:有,在shell32.dll里!
那如何调用呢?
这里笔者写了一段drawshell32的代码:
// 加载shell32.dll,随机获取一种图标,然后画出来
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
signed main()
{
srand(time(0));
HINSTANCE hShell = LoadLibrary("shell32.dll");
ShowWindow(GetConsoleWindow(),SW_HIDE);
POINT p;
while (1)
{
GetCursorPos(&p);
DrawIcon(GetWindowDC(GetDesktopWindow()),p.x,p.y,LoadIcon(hShell,MAKEINTRESOURCE(rand() % 256)));
Sleep(10);
}
return 0;
}
好啦,我们下期再见!
2022.8.12 更新:
在这里补充一下:如果要加载自己的图标可以使用LoadImage
可以参考:https://blog.csdn.net/hisinwang/article/details/45752089
2025.5.18 更新:
这是我三年级在B站上发布的专栏呢,最近突然看到了,就在博客上也发一下吧~希望你们喜欢!