אני שונא דרדסים!!!

annefan

New member
אני שונא דרדסים!!!

(וגם את MFC!!) אני כנראה ממש דפוק ועייף ולא מבין מהחיים שלי כלום. תעזרו לי, בבקשה. אני רוצה להציג CStatic שמיוצר באופן דינמי. לא הולך לי במה שאני כותב, אז ניסיתי אחרת. ב-VS.NET הפעלתי את האשף ל-MFC מבוסס דיאלוג בלי שום שינויים בכלום. נגמר האשף, הוספתי ל-OnInitDialog:
// TODO: Add extra initialization here CStatic m_dynStatic; m_dynStatic.Create(_T("Dynamically Created CStatic"), WS_CHILD|WS_VISIBLE, CRect(15,15,200,200), this);​
ותנחשו מה? אין כלום! מה אני עושה לא בסדר, for crying out loud??
 

annefan

New member
JAVA?

 

DadleFish

New member
תראה,

אני אישית לא מכיר יותר מדי, אבל יש תחליפים כמו QT או WxWindows - אולי תנסה לעבוד איתם במקום עם MFC. אני יודע שבכל פעם שעבדתי עם MFC נתקלתי לפחות בבעיה אחת ממש מרגיזה. MFC, כך נדמה לי, נותן לך לעשות בערך הכל, אבל 80% ממה שאתה רוצה לעשות הוא ממש פשוט בעזרת MFC, וה-20% האחרים דורשים דוקטורט בספריה הזו, ורק אנשים שיושבים כל היום וכל הלילה על MFC ידעו לענות לי על שאלות מתחכמות ב-MFC. אולי TOOLKITS אחרים יהיו נוחים או אינטואיטיביים יותר. מה שבטוח, אגב, WIN32 יותר פשוט. אמנם פחות HIGH LEVEL, אבל בדיוק בגלל זה הוא יותר אינטואיטיבי (לדעתי) מ-MFC. כל התורה בספר אחד (פצולד כמובן).
 

annefan

New member
אבל אני רוצה דברים פשוטים

דיאלוג עם X תיבות סימון, ו-X טקסטים לתיבות הנ"ל. מה שתוקע אותי זה העובדה ש-X ידוע רק בזמן ריצה, ולכן הדיאלוג לא יכול להיות מתוכנן מראש. QT לא חינמי (ולדעתי גם לא זמין לחלונות, אבל מזמן לא בדקתי). את WxWindows אני לא מכיר, אבל אולי באמת שוה לבדוק. API? יכול להיות גם. פשוט ה-GUI לחלונת היה לי בראש שזה MFC. טוב, תודה בכל מקרה. אני אבדוק.
 
אז דלפי או C++Builder

למה להסתבך עם משהו ארכאי מחורבן? בשביל בנית GUI מהירה מה שציינתי מעולה.
 

frangelico

New member
זה לא כלכך נורא

שים לב גם ש בסוף שבסוף הפונקציה InitDialog ה Static שלך יוצא מהזיכרון. תנסה:
CStatic *m_dynStatic = new CStatic(); m_dynStatic->Create(_T("Dynamically Created CStatic"), WS_CHILD|WS_VISIBLE, CRect(15,15,200,200), this);​
וכמובן תדאג לשחרר אותו איפשהו. ולכן כדאי להגדיר אותו כחבר במחלקה ואז אפשר להשתמש גם בלי מצביע כמו שניסית קודם. בהצלחה
 

ברנדל

New member
בדיוק ../images/Emo45.gif

או לחליפין תשים אותו כאיבר מחלקה של ה dialog (הפתרון המועדף עלי)
 

annefan

New member
המון תודה!

זה מה שקורה כשלא מבינים מה באמת קורה בפנים. עשיתי Create? עשיתי! חשבתי שזה מספיק. תודה בכל מקרה.
 

frangelico

New member
שים דגש לנקודה ש

שבמקרה שלך גם אם זה היה עובד - הדרך לא היתה נכונה. כי בדיאלוג באופן כללי אתה שם פקדים ורוצה לקרוא אותם, לכתוב להם, להעלים אותם, להציג שוב וכדומה עכשיו, כל פעולה כזו תתבצע בד"כ בפונקציה נפרדת - בד"כ כתגובה לפעולות של המשתמש. אם הגדרת פקד בפונקציה אחת כמשתנה מקומי כמו שניסית לעשות ובהנחה שהיית כן מצליח להציג אותו.אז אחרי שהפונקציה הסתיימה הפקד אמנם נראה על הדיאלוג אבל אין לך שום דרך להגיע אליו, ולבצע בו את כל הפעולות הנ"ל. במקרה של פקד טקסט סטטי אולי לא תרצה לשנות אותו יותר אבל ברוב הפקדים תצטרך להשתמש במהלך התכנית ולכן הדרך הזו אינה מומלצת (ובמקרה זה גם לא אפשרית). הדרך הנכונה ליצור פקדים היא להצהיר עליו כמשתנה במחלקה של הדיאלוג (כמו שהוזכר מעל) ואז ניתן לגשת אליהם מכל הפונקציות של המחלקה. במקרה שלך גודל לא ידוע, לכן מערך של מצביעים דינאמי יוגדר כחבר במחלקה ואז אתה יכול להוסיף ולהוריד ממנו פקדים כאוות נפשך, ממש כמו שאתה יוצר מערך דינאמי של int רגיל ב ++C.
 
למעלה