#define _WIN32_WINNT 0x601
#include <windows.h>
POINT p;
HDC hdc;
BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LPARAM lParam){
if(lpszType == RT_GROUP_ICON){
GetCursorPos(&p);
HICON hIcon = LoadIcon(hModule, lpszName);
int ix = GetSystemMetrics(SM_CXICON) / 2, iy = GetSystemMetrics(SM_CYICON) / 2;
DrawIcon(hdc, p.x-ix, p.y-iy, LoadIcon(hModule, lpszName));
}
Sleep(20);
return TRUE;
}
int main(){
hdc = GetDC(NULL);
HMODULE hShell32 = LoadLibrary("shell32.dll");
int w = GetSystemMetrics(SM_CXSCREEN), h = GetSystemMetrics(SM_CYSCREEN);
for(;;){
EnumResourceNamesA(hShell32, RT_GROUP_ICON, EnumResNameProc, 0);
Sleep(20);
}
}
有没有人能帮忙加个注释,
我实在是看不懂啊
LoadLibrary是动态引入动态库,可以不需要lib文件,前提是要知道动态库中要使用的API函数的输入参数和返回值类型
GetSystemMetrics是获取系统的一些度量值,如系统分辨率、窗体显示区域的宽度和高度、滚动条的宽度和高度等,SM_CXSCREEN和SM_CYSCREEN是以像素为单位计算的屏幕尺寸,不过main函数中白写了,w,h没使用。
EnumResourceNames是枚举资源中指定类型的模块,代码中是枚举图标文件(ICON),EnumResNameProc是回调函数,在这个函数中定义枚举过程的具体行为,代码中是将图标绘制在屏幕中央