[Win32] Как изменить курсор при клике в System Tray30.06.03 12:48 Автор: Green Статус: Незарегистрированный пользователь Отредактировано 30.06.03 13:01 Количество правок: 1
Есть иконка в System Tray, само окно скрыто(SW_HIDE). По нажатию левой кнопки мыши на этой иконке, указатель мыши должен смениться со стандартного на некоторый другой. Когда кнопка отпускается курсор меняется на стандартный. При движении мыщи с нажатой левой кнопкой курсор должен оставаться в этом измененном (нестандартном) состоянии до отпускания кнопки. Для этого и сделал SetCapture.
Это всё мне нужно примерно для такой фишки, как в Spy++ при выборе окна для мониторинга его сообщений. Вот только там "прицел" начинает движение из соотв. диалога, а у меня из трея.
> Есть иконка в System Tray, само окно скрыто(SW_HIDE). По > нажатию левой кнопки мыши на этой иконке, указатель мыши > должен смениться со стандартного на некоторый другой. Когда > кнопка отпускается курсор меняется на стандартный. При > движении мыщи с нажатой левой кнопкой курсор должен > оставаться в этом измененном (нестандартном) состоянии до > отпускания кнопки. Для этого и сделал SetCapture. > Это всё мне нужно примерно для такой фишки, как в Spy++ при > выборе окна для мониторинга его сообщений. Вот только там > "прицел" начинает движение из соотв. диалога, а у меня из > трея. > > Пробовал примерно так: > > LRESULT OnShellNote(UINT uMsg, WPARAM wParam, LPARAM > lParam, BOOL& bHandled) > { > switch((UINT)lParam) > { > case WM_LBUTTONUP: > ReleaseCapture(); > SetCursor(NULL); > break; > > case WM_LBUTTONDOWN: > SetCursor(m_hCursor); > SetCapture(); > break; > } > > return 0; > } > > LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, > LPARAM lParam, BOOL& bHandled) > { > return TRUE; > } > > Не получается. > SetSystemCursor использовать не хочется. > > Подскажите, как быть? Попробуй так
Вызов вставить в обработчик нажатия левой кнопки мыши на иконе
procedure SetMyCursor;
var
hCurrWnd : THandle;
iMyTID : integer;
iCurrTID : integer;
begin
hCurrWnd := GetForegroundWindow;
iMyTID := GetCurrentThreadId;
iCurrTID := GetWindowThreadProcessId(hCurrWnd, nil);
AttachThreadInput(iMyTID, iCurrTID, TRUE);
Setcursor(LoadCursor(0, IDC_WAIT));
AttachThreadInput(iMyTID, iCurrTID, FALSE);
end;
Спасибо, помогло!02.07.03 22:50 Автор: Green Статус: Незарегистрированный пользователь