2013-11-23 3 views
1

ОК, поэтому у меня есть пользовательская функция прямоугольника. Обычай прямоугольник выглядит следующим образом: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); 

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

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

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

спасибо

+2

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

ответ

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, как предлагает dbasic. Тогда вы будете использовать:

windowrect = GetWindowRect(hWnd,windowrectex); 
Смежные вопросы