Problems In Serializing

Panther

New member
Problems In Serializing

אני מנסה לעשות Serialize ולשמור משתנה שנמצא בקלאס CProjectView, ב VCPP. הבעיה שהמשתנה הוא אובייקט של הקלאס CMSFlexGrid, ואני לא יודע איך שומרים כאלה דברים. הוספתי את שורות המאקרו לקלאס CProjectView,
DECLARE_SERIAL (CProjectView) and IMPLEMENT_SERIAL(CProjectView, CFormView, 1)​
ואת הפונקציה שאמורה לבצע את ה Serialize:
void CProjectView::Serialize(CArchive &ar) { CFormView::Serialize(ar); m_ctlFGrid.Serialize(ar); }​
אבל זה פשוט לא שומר את המשתנה m_ctlFGrid! האם אני מפספס משהו? תודה
 

TZURYOAV

New member
בטח שאתה מפספס

Serialize היא פונקציה ווירטואלית אתה צריך לממש אותה עבור CMSFlexGrid
 

Panther

New member
ואיך אני עושה את זה?

ניסיתי לעשות את הקטע עם ה
if (ar.IsStoring()) ar<< m_ctlFGrid; else ar>> m_ctlFGrid;​
לזה אתה מתכוון? כי זה לא עבד, זה נתן שגיאה בקשר לאופרטור >>.
 

TZURYOAV

New member
טוב,תקשיב המחלקה לא תומכת ב

Serailize ומן הסתם גם לא תומכת באופרטור >> כנראה´ זו מחלקה ש ה WIZRAD יצר נכון? אתה יכול לגזור את המחלקה מ CObject ואז לממש את Serialize למשל תבין את הקוד של ה SERIALIZE אתה צריך לכתוב לבד כלומר מה בדיוק ישמר ב ARCHIVE!
 

Panther

New member
לא לא...

תקשיב איך הוספתי את הקלאס הזה: הוספתי ActiveX Control שנקרא Microsoft Flex Grid. ואז הלכתי לClass Wizard, ושם ל Member Variables, ואז הוספתי לקונטרול משתנה מסוג CMSFlexGrid, בקטגוריה Control, וככה יש לי משתנה שאיתו אני יכול לשלוט בגריד. הדבר היחיד שאני יכול לשנות בהגדרה של הקלאס הזה זה את השם שלו.
 

TZURYOAV

New member
אז מה? תגזור מחלקה חדשה

מהמחלקה שהוא הוסיף לך(אני יודע טוב מאוד איך הוספת אותה) COLECONTROL נגזר מ CWND שנגזר מ CCMDTARGET שנגזר מ COBJECT לכן יש לך את הגדרות הפונקציות,אתה רק צריך לממש אותן
 

Panther

New member
בילבלת אותי.. תסביר שוב בבקשה?

מה אני צריך לעשות? לגזור מחלקה חדשה מהמחלקה CMSFlexGrid? ואז מה אני עושה עם המחלקה הזאת? המשתנה ששולט בקונטרול הוא לא מהמחלקה החדשה שגזרתי. איפה אני צריך ליצור את הקטע: if (ar.IsStoring()) ar << bla bla else ar >> bla bla האם בתוך המחלקה שגזרתי? או לערוך בעצמי את הקבצי Header של CMSFlexGrid? אני מבולבל, תודה על העזרה שלך
 

TZURYOAV

New member
כן תגזור מחלקה חדשה ופשוט תשנה

אץ המשתנה של הקונטרול,עכשיו במחלה החדשה תממש את הפונקציה הווירטואלית Serialize אם אתה רוצה אתה יכול לערוך את קבצי הקוד(ש ה WIZARD יצר לך) של CMSFlexGrid בכל מקרה אתה צריך להבין שאין פה קסמים,אתה צריך לממש את הפונקציה הזאת בעצמך(נכון שב ACTIVEX יש מנגנון שמירה אבל לא מאמין שהוא ישמרו את התאים במקרה הזה) אם אתה לא רוצה להסתבך פשוט תוסיף פונקציה גלובלית ששומרת את הערכים של CMSFlexGrid
 
למעלה