שאלה ב- mfc

liron6

New member
שאלה ב- mfc

אני מתכנתת ב- visual c++ ב-mfc. רציתי לשים תמונה אבל אני צריכה איזה משצנה שנקרא CDC *pDC. מאיפה אני מקבלת אותו?
 

gilad_no

New member
מהחלון שבו את רוצה לצייר

void CMyDialog::OnPaint() { CClientDC DC(this); CRect Rect; GetClientRect(&Rect); DC.Rectangle(Rect); }​
 

ilankt

New member
אז מה ההבדל ביןCClientDC ל CPaintDC

ועוד שאלה, איך לשנות את הצבע רקע? אני יודע שזה עם fillrect, אבל זה עושה לי הבהובים...
 

gilad_no

New member
תשובות:

CPAINTDC קורא לBEGINPAINT שמכינה את הDC לצביעה בעוד שCCLIENTDC פשוט משתמשת בDC הנוכחי (ולא משנה אותו). לגבי ההיבהובים: יש 2 טריקים שצריך לעשות: 1. לבטל את WM_ERASEBKGND (לתפוס את ההודעה ופשוט להחזיר TRUE) 2. בתוך WM_PAINT, ליצור MEMDC ולעבוד עליו. עליו מבצעים את כל הפעולות (כולל צביעת הרקע) ולאחר שמסיימים הכל, מעתיקים את התוכן שלו לDC של החלון.
 

ilankt

New member
תודה, ועוד שאלה, אם אפשר ../images/Emo13.gif

אני רוצה ליצור dialog, שהוא יהיה החלון הראשי, אבל אני לא מצליח... ניסיתי לעשות CDialog ואז להחליף את זה ב Create, אבל לא עובד... איך אפשר לעשות את זה?
 

gilad_no

New member
מה הכוונה?

פרוייקט שמבוסס על DIALOG? פשוט בוחרים אותו בCLASSWIZARD. CREATE לדיאלוג משמש כדי ליצור אותו NONMODAL.
 

ilankt

New member
אוקיי, הצלחתי, אבל הוא לא יוצא לי

מהתוכנה כשיוצאים מהdialog... מה לעשות באירוע WM_QUIT?
 

ilankt

New member
גלעד - ניסוח מחדש

אתה יכול לעזור לי? אני ינסח את עצמי מחדש אני רוצה לעשות אפליקציה, אבל שאני לא יצטרך לצייר כל פקד עם קוד, אלא כ dialog שהוספתי כ resource, איך עושים שהוא יהיה החלון הראשי?
 

gilad_no

New member
יוצרים אפליקציית דיאלוג

בCLASSWIZARD תבחר MFC APPLICATION ובסוג היישום תבחר DIALOG BASED
 

g u y c o h e n

New member
אם תוכל

להרחיב טיפה לגבי MEMDC היתה לי בעייה עם זה אתמול (ראה שרשור), עשיתי כל מיני פעולות אך לא מצאתי פתרון מלא להיבהובים.
 

ilankt

New member
זה לא בעיה

תוסיף ל MESSAGEMAP שלך ON_WM_ERASEBKGND ואז פשוט באירוע הזה אל תעשה כלום.
 

gilad_no

New member
פתרון:

כמו שאמרתי, התהליך מורכב מ2 שלבים. הראשון הוא לתפוס את WM_ERASEBKGND ולהחזיר TRUE. בשלב השני, פשוט יוצרים MEMDC ועובדים עליו. אני מצרף פרוייקט פשוט שצובע את הרקע בלי הבהוב (לשנות סיומת לZIP) הערה: אם מציירים רקע קבוע, מומלץ בדר"כ לצייר אותו כבר בהודעת WM_ERASEBKGND ולא בWM_PAINT. אם יש גם ציור דינמי בWM_PAINT, אז כבר מבצעים הכל שם.
 
למעלה