Почему существует функция CopyRect WinAPI? - PullRequest
2 голосов
/ 30 сентября 2019

Существует функция CopyRect WinAPI , которая просто копирует RECT в другую.

Меня интересует причина существования функции с тех пор, как я выкопалэто до. Оператор присваивания (=) или CopyMemory не подходит для копирования RECT с? Должен ли я использовать функцию CopyRect, когда это возможно?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Функция CopyRect (вероятно) предназначена для использования с языками, которые не допускают прямого назначения структурам! В C++ вы можете сказать: RECT src{ 0, 0, 10, 10 }, dst; затем (где-нибудь, где-нибудь): dst = src;. Однако есть некоторые языки, которые не позволяют этого, поэтому у вас есть функция, чтобы сделать это. (Прошло очень много времени с тех пор, как я написал что-нибудь в Pascal, но как бы вы это сделали там? Или в COBOL ??)

Подобные аргументы могут быть сделаны для таких функций, как SetRect() и EqualRect(), конечно. Но ответ на ваш вопрос зависит, в первую очередь, от того, какой язык вы используете (ни один не указан в тегах) и, если позволяет этот язык, от ваших личных предпочтений кодирования. (Но учтите, что если проблема заключается в эффективности, вызов функции WinAPI будет всегда включать фактический вызов, а не inline!)

1 голос
/ 30 сентября 2019

CopyRect - старая функция, которая присутствует в Win32 API в основном для обеспечения совместимости, например WinExec, GetVersion и так далее. Его исходный код довольно прост: enter image description here

При запуске он проверяет оба параметра на значения NULL, а затем копирует 4 члена исходной записи в место назначения через промежуточный регистр,Возможно, есть смысл использовать эту функцию, если вы работаете с указателями RECT. В противном случае - прямое назначение намного дешевле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...