M@gelearn Ответов: 2

Как установить пользовательский курсор в целом в моем SDI ?


Привет .. любая помощь, как установить мой пользовательский курсор над всем проектом ?
У меня есть много статических кнопок управления и вдов... и я просто хочу использовать в целом тот же курсор, который я загружаю для всего SDI.
вот где я загружаю свой курсор:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int nCmdShow)
{
    InitCommonControls();

    WNDCLASSW wc = {0};

    wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW);
    wc.hCursor          = (HCURSOR)LoadImage(GetModuleHandle(NULL),
                          MAKEINTRESOURCE(IDC_CURSOR), IMAGE_CURSOR, 16, 16, 0);
..
...
....
}


а курсор загружается из ресурсов и все нормально.
Дело в том, что если я прохожу над элементом управления или просто над фреймом, курсор меняется на курсор windows по умолчанию, установленный в системе.

Что я уже пробовал:

Я знаю, что есть WM_SETCURSOR.. но как мне справиться с этим ..?

2 Ответов

Рейтинг:
12

M@gelearn

Ну, я действительно что-то изменил и в некоторых случаях, как это работает, но не на 100%

Я удаляю строку в WNDCLASSW

wc.hCursor = (HCURSOR)LoadImage(GetModuleHandle(NULL),
             MAKEINTRESOURCE(IDC_CURSOR), IMAGE_CURSOR, 16, 16, 0);


И я заявляю в глобальном масштабе
HCURSOR redarrow = (HCURSOR)LoadImage(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDC_CURSOR), IMAGE_CURSOR, 16, 16, 0);

case WM_SETCURSOR:
            {
                    SetCursor(redarrow);
                return 1;
            }
            return DefWindowProcW(hWnd, msg, wp, lp);


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


Richard MacCutchan

Курсоры принадлежат окнам, поэтому каждое окно будет отображать курсор, определенный для его класса. Если вы хотите иметь один курсор для всех окон, то вам нужно будет подклассировать все, что вы не создали для себя.

M@gelearn

Спасибо, Ричард.. Я вставляю WM_SETCURSOR в другие окна, которые у меня есть в проекте, и теперь он работает отлично..

Еще один случай, когда я не знаю, как изменить курсор..
У меня есть окно About и кнопка OK, которая определена в файле .rc следующим образом:
DEFPUSHBUTTON "&Ok", IDOK, 174, 66, 50, 14
Мне пришлось удалить эту кнопку, потому что при прохождении курсора она меняется на стандартную стрелку системы. И я понятия не имею, как изменить курсор, когда он проходит над IDOK
дело WM_COMMAND:
переключатель(wp)
{
случае значение Idok:
EndDialog(hWnd, IDOK);
перерыв;
}
перерыв;

Richard MacCutchan

Окно "о программе" - это диалоговое окно, поэтому оно будет использовать курсор по умолчанию для диалогового окна и его кнопок.

M@gelearn

Ну, как я и сказал .. Я просто удалил IDOK из диалогового окна, чтобы пользователь мог использовать только X, чтобы закрыть его, и это прекрасно работает с пользовательским курсором.
Эй, еще раз спасибо за помощь... ура!