0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 6
1

Создать кастомный курсор - WinAPI CreateCursor

27.06.2017, 02:14. Показов 2146. Ответов 2
Метки нет (Все метки)

Доброго времени суток! Подскажите плиз кто знает, как реализовать на MFC курсор мыши как в некоторых инструментах Photoshop (т.е. по сути курсор должен стать окружностью, без заливок, просто "ободок")? Была попытка реализовать с использованием CreateCursor(...), но пока не увенчалась успехом из-за AND-XOR масок.

http://www.photoshop-info.ru/u... cursor.gif

Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2017, 02:14
Ответы с готовыми решениями:

Крутится курсор мыши в WinAPI
Если при запуске приложения курсор мыши находится в окне(в клиентской области, не на кнопке) то он...

Создать кастомный TextBox
Как сделать такой TextBox ?

Как создать кастомный календарь в wpf?
Хотел создать кастомный календарь в wpf, но не смог разобраться как. Переопределить стиль...

Создать кастомный контейнер для разнотипных элементов управления
Здравствуйте уважаемые, подскажите пожалуйста какой контейнер можно использовать на форме, нужно...

2
836 / 639 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
28.06.2017, 08:52 2
Лучший ответ Сообщение было отмечено jaroslav_k как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//создание курсора-окружности в указанном любом размере 16, 32, 64, 128...
HCURSOR build_cursor(int size){
    HBITMAP hbm = CreateBitmap(size, size, 0, 1, NULL);
    if(hbm == NULL)
        return NULL;
 
    HBITMAP mask = CreateBitmap(size, size, 0, 1, NULL);
    if(mask == NULL){
        DeleteObject(hbm);
        return NULL;
    }
    HDC hdc = GetDC(NULL);
    HDC mdc = CreateCompatibleDC(hdc);
    SelectObject(mdc, hbm);
    PatBlt(mdc, 0, 0, size, size, WHITENESS);
 
    SelectObject(mdc, mask);
    PatBlt(mdc, 0, 0, size, size, BLACKNESS);
    HGDIOBJ nil = SelectObject(mdc, (HBRUSH)GetStockObject(NULL_BRUSH));
    HGDIOBJ old = SelectObject(mdc, (HPEN)GetStockObject(WHITE_PEN));
    Ellipse(mdc, 0, 0, size, size);
    SelectObject(mdc, old);
    SelectObject(mdc, nil);
 
    DeleteDC(mdc);
    ReleaseDC(NULL, hdc);
 
    HANDLE heap = GetProcessHeap();
    DWORD size1 = GetBitmapBits(hbm, 0L, NULL);
    PBYTE  ands = (PBYTE)HeapAlloc(heap, 0, size1);
    if(ands == NULL){
        DeleteObject(hbm);
        DeleteObject(mask);
        return NULL;
    }
    GetBitmapBits(hbm, (LONG)size1, ands);
    DeleteObject(hbm);
 
    DWORD size2 = GetBitmapBits(mask, 0L, NULL);
    PBYTE  xors = (PBYTE)HeapAlloc(heap, 0, size2);
    if(xors == NULL){
        HeapFree(heap, 0, ands);
        DeleteObject(mask);
        return NULL;    
    }
    GetBitmapBits(mask, (LONG)size2, xors);
    DeleteObject(mask);
 
    HCURSOR cur = CreateCursor((HINSTANCE)GetModuleHandle(NULL), size/2, size/2, size, size, ands, xors);
    HeapFree(heap, 0, ands);
    HeapFree(heap, 0, xors);
    return cur;
}
 
//...
 
HCURSOR cur = build_cursor(64); //размер может быть любой
 
//...
 
//когда курсор станет не нужный, то удалить его
DestroyCursor(cur);
p.s. это раньше драйвера ограничивались размером SM_CXCURSOR/SM_CYCURSOR
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 6
28.06.2017, 21:53  [ТС] 3
Спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2017, 21:53
Помогаю со студенческими работами здесь

Не могу создать папку или файл: после нажатия правой кнопки мыши навожу курсор на "Создать", и ноут зависает
Доброго времени суток! Не могу создать папку или любой другой файл. При нажатии пр. кн. мыши...

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

Создать свою иконку и курсор
Написать програму на Visual C++ 6.0, создать свою иконку и курсор! Что-то делаю ничего...

Создать и прицепить к программе курсор
Какие требования к файлу курсора и как его подцепить? Я создал было ico файл с разрешением 100x100...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru