Как вы получаете высоту и ширину CWnd *? CWnd это окно правильно? Почему не команда:
CWnd* parent = this->GetParent(); // C++ command
parent->GetSize(); // what I think the method should be OR ...
parent->GetWindowRect(); // what i think it should be (no arguments)
что это за LPRECT? У меня уже есть объект … почему и какой аргумент входит в GetWindowRect? На что я указываю? У меня уже есть объект, который я хочу найти размер … просто дайте мне размер.
LPRECT
параметр является указателем на RECT
состав (префикс «LP» фактически означает «длинный указатель» по историческим причинам).
GetWindowRect
функция собирается получить прямоугольник окна для вашего CWnd
объект, но он собирается сделать это, заполнив RECT
структура с этими координатами. Поэтому вам нужно создать RECT
структурировать и передать указатель на него GetWindowRect
функция.
Стоит отметить, что API принимает указатель на RECT
структура для полной совместимости с Win32. CRect
Класс MFC на самом деле наследуется от RECT
структура определяется SDK, так что вы можете использовать CRect
здесь взаимозаменяемо Что приятно, потому что CRect
предоставляет функции-члены, которые облегчают манипулирование прямоугольниками.
Образец кода:
CWnd* pwndParent = this->GetParent();
CRect rc;
pwndParent->GetWindowRect(&rc);
// rc now contains the rectangle of your window!
Обратите внимание, что GetWindowRect
функция вернет экран координаты вашего окна. Обычно это не то, что вы хотите, если только вы не пытаетесь изменить положение окна на экране. С координатами экрана сложно работать, потому что они относятся ко всему виртуальному экрану, который может иметь отрицательные координаты в конфигурации с несколькими мониторами. Кроме того, если вы попытаетесь определить размер окна, используя его экранные координаты, вы получите полный размер окна на экране, включая не связанные с клиентом области (например, строку заголовка, кнопки min / max / close). , так далее.).
Вместо этого вы обычно хотите клиент координаты окна, которые можно получить, вызвав GetClientRect
функция идентичным образом. На этот раз мы будем использовать RECT
структура, только потому, что мы можем:
CWnd* pwndParent = this->GetParent();
RECT rcClient;
pwndParent->GetClientRect(&rcClient);
Ответ вы используете GetWindowRect
,
CWnd* parent = this->GetParent();
CRect size;
parent->GetWindowRect(&size);
Если вы спрашиваете Зачем это сделано так, я могу придумать два ответа:
хорошо, я понял свой ответ, я верю. Здесь для тех, кто хочет знать …
CRect rc_total_window;
this->GetWindowRect(rc_total_window);
где this это объект CWnd *. Еще раз спасибо за всю историю и объяснения. Это помогает узнать, почему все так, как есть, поэтому вы можете быть уверены, что не делаете что-то не так; особенно помогает, когда методология отличается от того, что изучалось на современных языковых курсах.