Установить размер системного курсора - PullRequest
10 голосов
/ 11 марта 2019

Можно ли установить размер системного курсора более 32 на 32 пикселя?

В настоящее время я использую этот код для установки курсоров.

#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);
}

Однако, даже если курсорразмер файла больше 32 пикселей на 32 пикселя, при этом курсор не уменьшается.

Другой вопрос предлагается использовать LoadImage.

Однако, используя строку

const HCURSOR customCursor = static_cast<HCURSOR>(LoadImage(nullptr, L"Cursor.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE));

как и предполагалось, не имеет значения.Попытка вручную установить размер, например

const HCURSOR customCursor = static_cast<HCURSOR>(LoadImage(nullptr, L"Cursor.cur", IMAGE_CURSOR, 80, 80, LR_LOADFROMFILE));

, повлияла на качество курсора, но не на его размер.

У кого-нибудь есть предложения?


В настоящее время на моей системе установлена ​​Windows 10

1 Ответ

0 голосов
/ 20 марта 2019
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")

void main()
{
   int fResult;


   fResult = GetSystemMetrics(SM_CYCURSOR); 
}

Установка размера системного курсора Ans: вы можете установить любой размер, если система поддерживает это.Можно ли установить размер системного курсора более 32 на 32 пикселя?Ответ: Проверьте код, упомянутый выше. Если он выдает 32 в качестве выходных данных, это означает, что вы не можете превысить размер курсора. Для некоторых дисплеев это может дать вам большее число, поэтому на этих экранах вы можете иметь размер курсора больше.Поэтому идеальным способом является проверка SM_CYCURSOR SM_CXCURSOR независимо от размера курсора. Загрузите курсор одинакового размера из файла

Параметры nWidth и nHeight должны указывать ширину и высоту, которые поддерживаются текущим драйвером дисплея, посколькусистема не может создавать курсоры других размеров. Чтобы определить ширину и высоту, поддерживаемые драйвером дисплея, используйте функцию GetSystemMetrics, указав значение SM_CXCURSOR или SM_CYCURSOR.

Перед закрытием приложение должно вызватьФункция DestroyCursor для освобождения любых системных ресурсов, связанных с курсором.

Код, чтобы попробовать. Попробовать это на разных машинах с различным драйвером дисплея. От 32 до 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...