Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (142 стр)

Страницы: 1141 142 143 144168 Следующая »
#2115
9:36, 8 апр. 2020

Aroch
А если какой-нибудь GetClientRect возвращает неуспех?


#2116
9:38, 8 апр. 2020

nes
> хотя для фейла казалось бы нет никаких причин.
GetClientRect, ClientToScreen - возможна ошибка если передан неправильный HWND
GetCursorPos - в комментарии есть замечание "The input desktop must be the current desktop when you call GetCursorPos" - вероятно при невыполнении этого условия функция просто вернёт ошибку

> и что дальше, схлопывать из-за этого приложение и выдавать в лог LastError?

Пишешь что-то типа

IErrorReasonFactoryVirtualCtorImplementation: public IErrorSourceHandlerEntry
{
  virtual HERROR *GetOptionalReactionOnErrorDueToReasons( ERROR_REASON_DESCRIPTOR erds[], int descriptorsCount, /*outval */ int **results, int *resultsCount /* optional */ );
        ...
}
И далее по тексту. Главное сразу заложить расширяемость функционала на будущее.

#2117
9:43, 8 апр. 2020

=A=L=X=
То, что оно фейлится по инвалидным входным аргументам, это нормально,
но вот какие-то неописанные, недосказанные случаи дико бесят.
Вот какого этот всратый GetCursorPos вообще может фейлить из-за смены десктопа?

#2118
9:50, 8 апр. 2020

nes
> А если какой-нибудь GetClientRect возвращает неуспех?
переключаешься на программную реализацию окошек :)

#2119
9:51, 8 апр. 2020

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

#2120
9:51, 8 апр. 2020

Aroch
Трололо?

#2121
9:53, 8 апр. 2020

nes
> Вот какого этот всратый GetCursorPos вообще может фейлить из-за смены десктопа?

Ну видимо потому что курсор сейчас на другом десктопе.
Но вообще судя по всему ошибок может быть гораздо больше - так же там написано еще например, что у процесса должны быть права на десктоп.
Т.е. в общем случае да - выкидывай фатальную ошибку и пиши GetLastError в лог.

#2122
9:53, 8 апр. 2020

nes
> Трололо?
нет, в играх это нормально.

#2123
10:02, 8 апр. 2020

Aroch
Ну хз, для каких-нибудь говнарей наверное сойдет,
а мне хочется перфекта.

Сейчас каждая мелкая херовина у меня будет эхсепшенить...

#2124
10:08, 8 апр. 2020

nes
> Ну хз, для каких-нибудь говнарей наверное сойдет,
то есть в играх в которых есть свой ui и программный курсор, игры от говнорей, ок -_-"

#2125
(Правка: 10:12) 10:12, 8 апр. 2020

Aroch
Программный курсор - верх говнарьства, ибо плавает как говно по экрану.
Программный юй я не порицаю, но он тут вообще боком, хз к чему ты его тут привел в качестве примера.

#2126
(Правка: 10:18) 10:18, 8 апр. 2020

nes
> Программный курсор - верх говнарьства, ибо плавает как говно по экрану.
если у тебя системный приказал долго жить, то какой выбор? Кинуть эксепшн, "извини не могу получить координату курсора, идите играйте в игры от говнорей"?
> но он тут вообще боком, хз к чему ты его тут привел в качестве примера.
к тому что, кроме как размеров/положения окна которые ты сам задаешь ему почти ничего больше от системных окошек не нужно.

#2127
(Правка: 11:06) 11:02, 8 апр. 2020

nes
> Предположим пытаюсь я получить положение курсора мыши и функция GetCursorPos
> вернула фольс
> и что дальше, схлопывать из-за этого приложение и выдавать в лог LastError?
Поступай так, как будто указателя мыши больше не существует.
Вообще, закладываться на то, что курсор будет всегда и он всегда будет один - это нехорошо, потому что на сенсорных устройствах это не так.
Я, вот, у себя в велосипеде сделал апи под сенсорный дисплей указатель появляется с pointerdown(index, x, y), перемещается с pointermove(index, x, y) и исчезает с pointerup(index). А компьютерный курсор - это частный случай, когда все указатели находятся в одном месте. Само по себе положение мышки передаётся через index=0. Если нажать ЛКМ - то появляется index=1 и гоняется по экрану, пока кнопку не отпустить. ПКМ - это указатель с index=2.
В такой модели, курс действий очевиден - pointerup(0) и больше никаких сообщений от мыши, пока курсор не заработает вновь, тогда pointerdown(0, x, y) и дальше в штатном режиме.

nes
> А если какой-нибудь GetClientRect возвращает неуспех?
Зависит от того, как выглядит проблема икс.
Если ты переводишь координаты курсора из экранных координат в клиентские - то можно просто пропустить это сообщение. Окно будет работать дальше, просто перестанет видеть мышку. Может, оно в этот момент вообще свёрнуто, конечно оно не будет видеть мышку.

#2128
12:05, 8 апр. 2020

Aroch
>к тому что, кроме как размеров/положения окна которые ты сам задаешь ему почти ничего больше от системных окошек не нужно.
Ну вот я задаю лэйаут окна == ректу рабочей области текущего монитора,
который кстати беру по курсору мыши.
Далее мне нужно узнать клиентские размеры получившегося таким образом окна,
зову GetClientRect...

Delfigamer
>Поступай так, как будто указателя мыши больше не существует.
Остается только выдать сообщение - вы запустили игоря в системе без крысы, идите в пень?

>Я, вот, у себя в велосипеде сделал апи под сенсорный дисплей указатель появляется с pointerdown(index, x, y)
А если логика приложения не предусматривает работы с обезьяньими устройствами?

>В такой модели, курс действий очевиден
Только вся эта абстракция еще как-то должна коррелировать с перволицевой камерой,
когда нам нужен не пойнтер мыши а ее смещение.

#2129
12:14, 8 апр. 2020

nes
> Далее мне нужно узнать клиентские размеры получившегося таким образом окна,
> зову GetClientRect...
зачем? GetClientRect нужен если у тебя игра в окошке и ты используешь системный title и системные рамки. Если же у тебя "голое" окно, то client_size == win_size. Да и чтобы GetClientRect зафейлился нужно подсунуть левый hWnd и тут ты уже сам себе буратино.

Страницы: 1141 142 143 144168 Следующая »
ФлеймФорумПрограммирование