אוף עם ה MFC הזה

vinney

Well-known member
חשבתי על זה

ואז בדקתי מה יש לי בrect, וגיליתי שזה יחסית לחלון (ימין=0,עליון=0, שמאל ותחתון בגודל החלון). מה שלכשעצמו נראה לי מוזר, אבל לצורך העניין אמור היה לעבוד. עוד רעיונות?
 

ברנדל

New member
אה, נו בטח..

אתה חייב להתאים את הקורדינטות לקורדינטות של החלון, עושים את זה עם ScreenToClient:
// TODO: Add extra validation here CButton *pButton = (CButton*)GetDlgItem(IDOK); CRect rect; this->GetWindowRect(&rect); ScreenToClient(&rect); pButton->SetWindowPos(this , rect.left, rect.top, rect.right, rect.bottom, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); // CDialog::OnOK();​
 

ברנדל

New member
ואני אסביר טיפה יותר לעומק:

כשאתה עושה GetWindowRect אתה מקבל קוארדינטות של החלון ביחס למסך כולו. הבעיה היא שכשאתה מציג את הכפתור בתוך החלון , אסור לך שהייחוס שלו יהיה ביחס למסך כולו, אבל מצד שני אתה רוצה להשתמש ב rect שקיבל את הייחוס ההתחלתי מהמסך. אז אתה חייב להמיר את הקוארדינטות של ה rect שיתאימו רק לחלון ה dialog.
 

vinney

Well-known member
עשיתי גם את זה, 0 השפעה

נראה לי אתם קוראים את אותם האתרים שכבר עברתי עליהם
 

Pembelton

New member
(לא הוספתי הסבר לקוד שכתבתי)

אתה רוצה שהחלון הפנימי ימלא את כל החיצוני. לכן, המיקום שלו יהיה תמיד 0, 0 והגודל שלו זהה לגודל של החלון החיצוני.
 

gilad_no

New member
CLIENT\SCREEN

GetWindowRect מחזיר קורדינטות של המסך, בעוד SetWindowPos מקבל קורדינטות של לקוח (והפקד שלך הוא WS_CHILD).
CRect Rect; GetWindowRect(&Rect); Parent.ScreenToClient(&Rect); MoveWindow(Rect);​
 
למעלה