RECT, передавая собственную структуру rect в функцию, которая требует RECT

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

typedef struct tagRECTEx{
// long left;
// long top;
// long right;
// long bottom;
RECT dimensions;

int width()) {
return dimensions.right-dimensions.left;
}
int height(){
return dimensions.bottom - dimensions.top;
}

} RectEx;

Теперь вместо использования давайте скажем:

RECT windowrect;
windowrect = GetWindowRect(hWnd,&windowrect);

Я хотел бы, чтобы это было вместо этого:

RectEx windowrectex;
windowrect = GetWindowRect(hWnd,&windowrectex);

....

Теперь это не скомпилируется, потому что он не может конвертировать rectex в tagRECT, хорошо, я понял это, я понимаю это.

Поэтому в течение последних нескольких дней я искал операторов кастинга и переопределения.

Я даже пытаюсь реализовать что-то вроде:

GetWindowRect(hWnd, (RectEx)&windowrectex);

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

Я хочу использовать мою собственную структуру прямоугольника, так как она автоматически получит ширину и высоту прямоугольника для меня, вместо того, чтобы делать rect.right-rect.left и т. Д.

Если вам нужна дополнительная информация об этом или что-то еще, пожалуйста, дайте мне знать.

благодарю вас

1

Решение

поскольку GetWindowRect принимает LPRECT как второй параметр, нет возможности передать RectEx,

Что вы можете сделать, чтобы использовать RectExВы можете перегрузить оператор приведения типов следующим образом

operator LPRECT () const
{
return &dimensions;
}

Однако перегрузка типов не рекомендуется из-за нежелательного преобразования типов. Делайте только тогда, когда вы уверены в этом.

1

Другие решения

Просто передайте RECT изнутри вашего RectEx,

RectEx windowrectex;
windowrect = GetWindowRect(hWnd,&windowrectex.dimensions);

Кроме того, вы можете сделать RectEx наследовать от RECT и удалить dimensions,

Или добавьте оператор преобразования, operator RECT*() const как предлагает дбасик. Тогда вы бы использовали:

windowrect = GetWindowRect(hWnd,windowrectex);
1

По вопросам рекламы [email protected]