设置系统光标大小 [英] Set system cursor size
问题描述
是否可以将系统光标大小设置为超过 32 像素 x 32 像素?
Is it possible to set the system cursor size to over 32px by 32px?
目前我正在使用此代码来设置游标.
Currently I am using this code to set the cursors.
#define OEMRESOURCE
#include <windows.h>
#include <chrono>
#include <thread>
int main()
{
//Load cursor
const HCURSOR customCursor = LoadCursorFromFile(L"Cursor.cur");
//Replace system cursor with loaded cursor
SetSystemCursor(customCursor, OCR_NORMAL);
//Sleep the current thread to allow the user to play with new cursor
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
//Restore original system cursors
SystemParametersInfo(SPI_SETCURSORS, 0, nullptr, 0);
}
然而,即使光标文件大于 32px x 32px,光标也不会被缩小.
However, even though the cursor file is bigger than 32px by 32px, it is not the cursor gets scaled down.
建议使用 LoadImage
的另一个问题.
Another question suggested using LoadImage
.
但是,使用线
const HCURSOR customCursor = static_cast<HCURSOR>(LoadImage(nullptr, L"Cursor.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE));
按照建议似乎没有什么区别.尝试手动设置大小,如
as suggested did not seem to make a difference. Trying to manually set the size, like
const HCURSOR customCursor = static_cast<HCURSOR>(LoadImage(nullptr, L"Cursor.cur", IMAGE_CURSOR, 80, 80, LR_LOADFROMFILE));
影响光标的质量,但不影响光标的大小.
affected the quality of the cursor but not the size of it.
大家有什么建议吗?
我目前在我的系统上运行 Windows 10
I am currently running Windows 10 on my system
推荐答案
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")
void main()
{
int fResult;
fResult = GetSystemMetrics(SM_CYCURSOR);
}
设置系统光标大小Ans:如果系统支持,您可以将大小设置为任何内容.是否可以将系统光标大小设置为超过 32 像素 x 32 像素?Ans:测试上面提到的代码如果它给出 32 作为输出,则意味着您不能超过光标大小对于某些显示器,它可能会为您提供更高的数字,因此在这些屏幕上,您可以使光标尺寸更大.所以理想的方法是检查 SM_CYCURSOR SM_CXCURSOR 无论游标的大小从文件加载相同大小的光标
Set system cursor size Ans: you can set size to anything if system supports it . Is it possible to set the system cursor size to over 32px by 32px? Ans:Test the code mentioned above If it gives 32 as output that means you cannot exceed cursor size For some Display it may give you higher number so on those screen you can have cursor size larger. So Ideal way is to check for SM_CYCURSOR SM_CXCURSOR whatever is size of cursor Load same size cursor from file
nWidth 和 nHeight 参数必须指定当前显示驱动支持的宽度和高度,因为系统无法创建其他尺寸的光标. 确定显示器支持的宽度和高度驱动程序,使用 GetSystemMetrics 函数,指定 SM_CXCURSOR 或 SM_CYCURSOR 值.
The nWidth and nHeight parameters must specify a width and height that are supported by the current display driver, because the system cannot create cursors of other sizes. To determine the width and height supported by the display driver, use the GetSystemMetrics function, specifying the SM_CXCURSOR or SM_CYCURSOR value.
在关闭之前,应用程序必须调用 DestroyCursor 函数以释放与光标关联的所有系统资源.
Before closing, an application must call the DestroyCursor function to free any system resources associated with the cursor.
尝试的代码.在具有不同显示驱动程序的不同机器上试试这个.chnage 32 到 64
code to try .try this on different Machines with different display driver.chnage 32 to 64
HINSTANCE hinst; // handle to current instance
HCURSOR hCurs1, hCurs2; // cursor handles
HCURSOR hCurs3; // cursor handle
// Yin-shaped cursor AND mask
BYTE ANDmaskCursor[] =
{
0xFF, 0xFC, 0x3F, 0xFF, // line 1
0xFF, 0xC0, 0x1F, 0xFF, // line 2
0xFF, 0x00, 0x3F, 0xFF, // line 3
0xFE, 0x00, 0xFF, 0xFF, // line 4
0xF7, 0x01, 0xFF, 0xFF, // line 5
0xF0, 0x03, 0xFF, 0xFF, // line 6
0xF0, 0x03, 0xFF, 0xFF, // line 7
0xE0, 0x07, 0xFF, 0xFF, // line 8
0xC0, 0x07, 0xFF, 0xFF, // line 9
0xC0, 0x0F, 0xFF, 0xFF, // line 10
0x80, 0x0F, 0xFF, 0xFF, // line 11
0x80, 0x0F, 0xFF, 0xFF, // line 12
0x80, 0x07, 0xFF, 0xFF, // line 13
0x00, 0x07, 0xFF, 0xFF, // line 14
0x00, 0x03, 0xFF, 0xFF, // line 15
0x00, 0x00, 0xFF, 0xFF, // line 16
0x00, 0x00, 0x7F, 0xFF, // line 17
0x00, 0x00, 0x1F, 0xFF, // line 18
0x00, 0x00, 0x0F, 0xFF, // line 19
0x80, 0x00, 0x0F, 0xFF, // line 20
0x80, 0x00, 0x07, 0xFF, // line 21
0x80, 0x00, 0x07, 0xFF, // line 22
0xC0, 0x00, 0x07, 0xFF, // line 23
0xC0, 0x00, 0x0F, 0xFF, // line 24
0xE0, 0x00, 0x0F, 0xFF, // line 25
0xF0, 0x00, 0x1F, 0xFF, // line 26
0xF0, 0x00, 0x1F, 0xFF, // line 27
0xF8, 0x00, 0x3F, 0xFF, // line 28
0xFE, 0x00, 0x7F, 0xFF, // line 29
0xFF, 0x00, 0xFF, 0xFF, // line 30
0xFF, 0xC3, 0xFF, 0xFF, // line 31
0xFF, 0xFF, 0xFF, 0xFF // line 32
};
// Yin-shaped cursor XOR mask
BYTE XORmaskCursor[] =
{
0x00, 0x00, 0x00, 0x00, // line 1
0x00, 0x03, 0xC0, 0x00, // line 2
0x00, 0x3F, 0x00, 0x00, // line 3
0x00, 0xFE, 0x00, 0x00, // line 4
0x0E, 0xFC, 0x00, 0x00, // line 5
0x07, 0xF8, 0x00, 0x00, // line 6
0x07, 0xF8, 0x00, 0x00, // line 7
0x0F, 0xF0, 0x00, 0x00, // line 8
0x1F, 0xF0, 0x00, 0x00, // line 9
0x1F, 0xE0, 0x00, 0x00, // line 10
0x3F, 0xE0, 0x00, 0x00, // line 11
0x3F, 0xE0, 0x00, 0x00, // line 12
0x3F, 0xF0, 0x00, 0x00, // line 13
0x7F, 0xF0, 0x00, 0x00, // line 14
0x7F, 0xF8, 0x00, 0x00, // line 15
0x7F, 0xFC, 0x00, 0x00, // line 16
0x7F, 0xFF, 0x00, 0x00, // line 17
0x7F, 0xFF, 0x80, 0x00, // line 18
0x7F, 0xFF, 0xE0, 0x00, // line 19
0x3F, 0xFF, 0xE0, 0x00, // line 20
0x3F, 0xC7, 0xF0, 0x00, // line 21
0x3F, 0x83, 0xF0, 0x00, // line 22
0x1F, 0x83, 0xF0, 0x00, // line 23
0x1F, 0x83, 0xE0, 0x00, // line 24
0x0F, 0xC7, 0xE0, 0x00, // line 25
0x07, 0xFF, 0xC0, 0x00, // line 26
0x07, 0xFF, 0xC0, 0x00, // line 27
0x01, 0xFF, 0x80, 0x00, // line 28
0x00, 0xFF, 0x00, 0x00, // line 29
0x00, 0x3C, 0x00, 0x00, // line 30
0x00, 0x00, 0x00, 0x00, // line 31
0x00, 0x00, 0x00, 0x00 // line 32
};
// Create a custom cursor at run time.
hCurs3 = CreateCursor( hinst, // app. instance
19, // horizontal position of hot spot
2, // vertical position of hot spot
32, // cursor width
32, // cursor height
ANDmaskCursor, // AND mask
XORmaskCursor ); // XOR mask
这篇关于设置系统光标大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!