win32api - window styles

gmorphus

New member
win32api - window styles

שלום חברים, יצרתי פרוייקט MFC חדש באמצעות הwizard של VC6 כאשר אני בוחר Dialog Based. מיקמתי עליו ListBox (השתמשתי רק בResource Editor) וננתי לו את המזהה IDC_LIST1. הוספתי את השורה הבאה ממש לפני ה return ב OnInitDialog:
LONG lStyle = GetWindowLong(GetDlgItem(IDC_LIST1)->GetSafeHwnd(), GWL_STYLE);​
הערך 0x50010103 הוחזר לתוך lStyle. מכאן הגעתי למסקנה שהסגנונות שניתנו לחלון הם WS_CHILD, WS_VISIBLE, WS_TABSTOP. אולם עדיין נשארו לי שלושה ביטים דלוקים (0x103) שלא התאימו לשום סגנון. למישהו יש הסבר? תודה מראש,
 

vinney

Well-known member
אתה יכול לראות את כל הסגנונות

בRESOURCE EDITOR באופן ויזואלי וברור. כמו כן, אם אתה משתמש בWIZARDים של MFC וRESOURCE EDITOR, למה לך להשתמש בGetDlgItem, כשבמקום זה אתה יכול להציב במחלקה שלך משתנה מסוג CListBox שיהיה מקושר אוטומטית לקונטרול שלך? הרבה יותר פשוט וברור.
 

gmorphus

New member
לא ענית לי לשאלה

ויני, קודם כל תודה על התגובה, אבל ענית לי תשובה שעונים למישהו שלפני חודש וחצי התחיל לתכנת בVC... אני כבר מספר מאוד מכובד של שנים עושה את זה. השאלה שלי לא הייתה שאלה של מתחיל, ואני בהחלט מודע לכל מה שאמרת. לא יצרתי member var כי לא היה לי כח. אני עובד יותר מהר עם המקלדת מאשר עם העכבר... לענייננו, המטרה שלי הייתה הפוכה, לא לעשות לעצמי את החיים קלים אלא לחקור יותק לעומק. הפואנטה היא שניסית לגלות את הסגנונות של ה ListBox של MFC (ומשום מה לא כולם רשומים ב Properties של ה Resource Editor). באמצעות GetWindowLong הייתי אמור לקבל את כל הסגנונות של החלון, אבל מסתבר שמסתתרים שם עוד כמה. או שיש עוד כמה ערכים שמסתתרים במספר שקיבלתי שאני לא מודע. השאלה שלי הייתה מכוונת כדי לברר מהם... זה הכל.
 

כאגאי

New member
אתה יכול להשתמש ב SPY שמגיע

עם ההפצות של VISUAL STUDIO, לסמן את הפקד הרצוי ולראות את המאפיינים שלו (כשמות) בתוכנה.
 

gmorphus

New member
תודה!

משום לא חשבתי ש Spy++ החביב יכול להגיד איזה סגנונות יש לחלון מסוים. הסתבר שהערכים שהיו חסרים הם, באופן מפתיע, הסגנונות שמתאימים ל ListBox. ויני, אני מצטער אם הייתי בוטה...
 

אמיר ט

New member
עוד משהו קטן

נראה לי עדיף להשתמש ב
LONG lStyle = GetDlgItem(IDC_LIST1)->GetWindowStyle();​
 

gmorphus

New member
למה נראה לך שעדיף?

מאוד מסקרן אותי מאיפה זה בא מה שאתה אומר...
 

DNile

New member
כי זה אווילי לעבוד עם HWNDים,

כשאתה משתמש בMFC.
 

gmorphus

New member
זה נכון...

אבל תלוי מה המטרה שלך. אני ספציפית מנסה להבין איזה משהו שקשור בAPI ולכן אני רוצה לעבוד עם הAPI לא דרך MFC. חוץ מזה, אני לא בטוח שמי שאמיר, שהשאיר את ההודעה הקודמת לזה הוא התכוון. בכל מקרה, אין שום הבדל. זה קורא בסופו של לאותה הפונקציה.
 

אמיר ט

New member
כמה סיבות

שזה עדיף (לדעתי) א. יותר יפה וקריא. ב. שימוש יותר נכון בMFC. בכל מקרה, MFC הוא סה"כ הרבה אובייקטים שעוטפים את ה API של חלונות בסופו של דבר, אין שום סיבה לא לעבוד עם MFC כשאתה מתכנת תחת MFC...
 
למה למה למה?../images/Emo26.gif

בתור מישהו עם אפס נסיון ב-MFC או בתכנות ב-WIN בכלל, לאחרונה נכנסתי לפרויקט שיש בו קצת GUI ל-WIN - אז אני אשמח לשמוע הסבר למתחילים על הדיון כאן...
 

vinney

Well-known member
המם....

MFC זה ספריית מחלקות המפשטות את הAPI ומסתירות אותו. למעשה MFC נותן מעטפת "מושלמת" לGUI על ידי סט של אובייקטים, מבלי שיהיה צורך לגשת ליישויות הפיזיות עצמן. HWND זאת ישות פיזית של חלון.
 
למעלה