ABA


"שאלה ב- Visual C++"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #8365 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 8365
DrDeath

   22:10   22.11.02   
אל הפורום  
  שאלה ב- Visual C++  
 
   יש לי חלון מבוסס Dialog Box ואני רוצה שברגע שאני מריץ את התוכנית החלון יגדל למקסימום גודל של המסך.
עכשיו, ניסיתי לעשות את זה בעזרת setwindowpos אבל אני לא מבין עם איזה אובייקט אני צריך לקרוא לפונקציה הזו. ניסיתי עם זו של ה-Dialog Box אבל זה כמובן לא עובד כי אין למחלקה הזאת את הפונקציה setwindowpos.

תודה על העזרה חבר'ה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מישהו יכול בבקשה לעזור? DrDeath 23.11.02 12:30 1
  חבר'ה נו בבקשה תעזרו.. DrDeath 23.11.02 15:03 2
  נו מה אף אחד לא יודע? DrDeath 23.11.02 18:04 3
  מה יהיה? אפילו לא רעיון כללי? DrDeath 23.11.02 21:35 4
  נו באמת אנשים.. אני מאוכזב. לפחות תגידו משהו! DrDeath 24.11.02 15:39 5
  אני אנסה אבל אתה צריך להסביר יותר טוב Boaz_fr 24.11.02 21:14 6
     אוקיי DrDeath 25.11.02 21:50 7
         כל חלון בMFC הוא ירושה של CWnd Boaz_fr 25.11.02 22:45 8
             אני לא מבין.. DrDeath 26.11.02 21:04 9
                 נכון זה לא אוביקט זה מצביע לאוביקט Boaz_fr 26.11.02 21:09 10
                     תראה DrDeath 26.11.02 21:18 11
                         תכתוב (בדיוק) SetWindowPos Boaz_fr 26.11.02 21:29 12
                             אופס DrDeath 26.11.02 21:34 13
                                 שלילי, תצרף את הקוד ואני אראה לך Boaz_fr 26.11.02 21:36 14
                                     הנה DrDeath 26.11.02 21:40 15
                                         אתה נמצא במלכוד Boaz_fr 26.11.02 21:46 16
                                             בעיה DrDeath 26.11.02 21:54 17
                                                 תכנס ל Class Wizard Boaz_fr 26.11.02 22:12 18
                                                     יש לי NET. DrDeath 26.11.02 23:08 19
                                                         מצטער שלא עניתי קודם, Quant86 26.11.02 23:58 20
                                                             תודה Boaz_fr 27.11.02 07:45 21
                                                             לא מבין..... DrDeath 27.11.02 15:37 22
                                                                 אחי עד כאן Boaz_fr 27.11.02 22:44 23
                                                                     חבוב, Its as simple as it is Quant86 27.11.02 23:56 24
                                                                         תקשיב.. DrDeath 28.11.02 13:13 25
                                                                             אוקי, הגיע הזמן להשתמש בפונקציה Quant86 28.11.02 18:43 26
                                                                                 או הו.... DrDeath 28.11.02 20:27 27
                                                                                     בדיוק צה שאמרתי לך קודם Boaz_fr 30.11.02 18:48 28

       
DrDeath

   12:30   23.11.02   
אל הפורום  
  1. מישהו יכול בבקשה לעזור?  
בתגובה להודעה מספר 0
 
   לא נראה לי שזה עד כדי כך מסובך, אני פשוט מתחיל בVisual C++


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   15:03   23.11.02   
אל הפורום  
  2. חבר'ה נו בבקשה תעזרו..  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   18:04   23.11.02   
אל הפורום  
  3. נו מה אף אחד לא יודע?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:35   23.11.02   
אל הפורום  
  4. מה יהיה? אפילו לא רעיון כללי?  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   15:39   24.11.02   
אל הפורום  
  5. נו באמת אנשים.. אני מאוכזב. לפחות תגידו משהו!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   21:14   24.11.02   
אל הפורום  
  6. אני אנסה אבל אתה צריך להסביר יותר טוב  
בתגובה להודעה מספר 0
 
   כפי שאתה בטח יודע לכל חלון יש HANDLE דרך הHANDLE אתה יכול לשנות את גודל החלון בלי שום בעיה עם SetWindowPos או MoveWindow

אם אתה רוצה יותר פרוט תענה לי בבקשה על שתי שאלות
א. איך אתה יוצר את החלון שלך?
ב. האם אתה משתמש בMFC?

s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:50   25.11.02   
אל הפורום  
  7. אוקיי  
בתגובה להודעה מספר 6
 
   1. החלון שלי כבר נמצא בתוכנית, אני לא יוצר אותו בזמן שהתוכנית רצה.
2. כן.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   22:45   25.11.02   
אל הפורום  
  8. כל חלון בMFC הוא ירושה של CWnd  
בתגובה להודעה מספר 7
 
   לCWnd יש משתנה בשם m_hWnd שהוא הHandle של החלון
אתה יכול בהשתמש בhandle הזה עם הפונקציה SetWindowPos
יש שתי פונקציות
1 - פונקציה של CWnd
2 - פונקצית API
תבחר מה שבא לך

אם אתה לא מבין תצרף את הקוד שלך
s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:04   26.11.02   
אל הפורום  
  9. אני לא מבין..  
בתגובה להודעה מספר 8
 
   עבר עריכה לאחרונה בתאריך 26.11.02 בשעה 21:05
 
כתבתי:


m_pMainWnd.setwindowpos( NULL, 0 ,0 ,500 ,500 ,swp_showwindow );

אבל זה עדיין אומר לי ש-m_pMainWind זה לא אובייקט ושאי אפשר לקרוא לפונקציה setwindowpos דרכו.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   21:09   26.11.02   
אל הפורום  
  10. נכון זה לא אוביקט זה מצביע לאוביקט  
בתגובה להודעה מספר 9
 
   במקום (.) נקודה תשתמש ב (<-)

ותלמד ++C ...

s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:18   26.11.02   
אל הפורום  
  11. תראה  
בתגובה להודעה מספר 10
 
   עבר עריכה לאחרונה בתאריך 26.11.02 בשעה 21:19
 
ניסיתי את זה וזה לא עובד בובקל'ך.. אז אל תגיד לי ללמוד ++C כי אני יודע ++C, אמנם לא ברמה שלך אבל אני יודע.

זה נותן error:
C2039: 'setwindowpos' : is not a member of 'CWnd'

ואגב, תודה על העזרה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   21:29   26.11.02   
אל הפורום  
  12. תכתוב (בדיוק) SetWindowPos  
בתגובה להודעה מספר 11
 
   תסתכל בקטע מהMSDN

s22Boaz_frs33

http://rotter.net/User_files/nor/3de3cb8356212a28.gif


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:34   26.11.02   
אל הפורום  
  13. אופס  
בתגובה להודעה מספר 12
 
   לא כתבתי את האותיות הגדולות.
אבל עכשיו יש בעיה אחרת. זה אומר שיש Assertion Error. נראה לי משהו חמור כי זה בא בחלון נפרד, לא בdebugger window.

אולי זה בגלל שאני שם את השורה הזאת במקום הלא נכון? איפה בדיוק צריך לשים אותה? מיד אחרי שיש את ההגדרה הזאת: m_pMainWnd = &dlg; ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   21:36   26.11.02   
אל הפורום  
  14. שלילי, תצרף את הקוד ואני אראה לך  
בתגובה להודעה מספר 13
 
   s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:40   26.11.02   
אל הפורום  
  15. הנה  
בתגובה להודעה מספר 14
 
   עבר עריכה לאחרונה בתאריך 26.11.02 בשעה 21:41
 
זאת פונקציה שנמצאת בקובץ הראשי של התוכנית:


BOOL CMuliApp::InitInstance()
{
// InitCommonControls() is required on Windows XP if an application
// manifest specifies use of ComCtl32.dll version 6 or later to enable
// visual styles. Otherwise, any window creation will fail.
InitCommonControls();

CWinApp::InitInstance();

AfxEnableControlContainer();

CMuliDlg dlg;

m_pMainWnd = &dlg;

m_pMainWnd -> SetWindowPos( NULL, 0 ,0 ,1000 ,500 ,SWP_SHOWWINDOW );
INT_PTR nResponse = dlg.DoModal();

if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

וזה עושה את הerror.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   21:46   26.11.02   
אל הפורום  
  16. אתה נמצא במלכוד  
בתגובה להודעה מספר 15
 
   הדיאלוג שלך נוצר בפונקציה DoModal
לכן אתה לא יכול לשנות את גודל החלון לפני הDoModal
אחרי הDoModal החלון כבר נהרס...

פתרון

תכנס לתוך הclass
CMultiDlg
תוסיף של את הפונקציה OnInitDialog
ותכתוב את הפונקציה שלך (SetWindowPos) שם

דרך אגב, זה נקרא ריכוזיות אחד ממאפיני ++C
s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   21:54   26.11.02   
אל הפורום  
  17. בעיה  
בתגובה להודעה מספר 16
 
   לא הבנתי מה זאת אומרת "להוסיף שם את הפונקציה OnInitDialog".
מה בדיוק אני כותב?

מצטער, אבל עוד לא הגעתי לרמה הזאת של ++C, אני לא כל כך מבין מה זה רוכוזיות, אבל עזוב, בוא נתמקד בבעיה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   22:12   26.11.02   
אל הפורום  
  18. תכנס ל Class Wizard  
בתגובה להודעה מספר 17
 
   תבחר לCMultiDlg (בclass שלך)
ותבחר את הmassage
WM_INITDIALOG
ותצור ממנו פונקציה

s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   23:08   26.11.02   
אל הפורום  
  19. יש לי NET.  
בתגובה להודעה מספר 18
 
   איך עושים את זה שם?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   23:58   26.11.02   
אל הפורום  
  20. מצטער שלא עניתי קודם,  
בתגובה להודעה מספר 19
 
   בלתי אפשרי לעבוד דרך נטסקייפ ברוטר:(
קיצור ככה:
כנס ב.NET לעריכת הקובץ
MultiDlg.cpp
עכשיו אתה רואה את כל הקוד של החלון עצמו, לא רק של התוכנית שיוצרת את התוכנית, עכשיו החלון הוא בעצם אובייקט שמורש מCDIAOLOG, בCDIALOG יש פונקציה שקוראים לה ONINITDIALOG, ומותר לך לרשת אותה (C++) עכשיו, כדי לעשות זאת, נראה לי שלא צריך להוסיף אותה ידנית, הNET מוסיף אותה אוטומטית, תמצא את היישום של הפונקציה OnInitDialog תעשה חיפוש אפילו בקובץ הזה, עכשיו בסוף הקובץ , לפני הRETURN כתוב לך
// todo ........

שם תוסיף את מה שבועז הסביר לך...

ד"א בועז, לפי דעתי מאוד יפה מה שאתה עושה, זה שיש לך סבלנות לעזור והכל, באמת תודה, גם לי עזרת לא פעם!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   07:45   27.11.02   
אל הפורום  
  21. תודה  
בתגובה להודעה מספר 20
 
   s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   15:37   27.11.02   
אל הפורום  
  22. לא מבין.....  
בתגובה להודעה מספר 20
 
   מצטער אבל אני עדיין לא מבין איפה לרשום מה.
זה כבר מתחיל להרגיז אותי ואני מניח שגם הנודניקיות שלי מתחילה לעצבן אותכם, אז אולי פשוט תרשום כאן בדיוק מה צריך להיות כתוב ואיפה.

תודה, ואני באמת מעריך את עזרתכם.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   22:44   27.11.02   
אל הפורום  
  23. אחי עד כאן  
בתגובה להודעה מספר 22
 
   הוספת פונקציה היא אחד הדברים הבסיסים ביותר בתכנות בMFC
אני לא מכיר את הVS7 אבל אין לי ספק שזה פשוט
תשחק איתו קצת בסוף תצליח

s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   23:56   27.11.02   
אל הפורום  
  24. חבוב, Its as simple as it is  
בתגובה להודעה מספר 23
 
   תמצא את הפונקציה הבאה:
OnInitDialog()

אם אתה מתקשה למצוא לך ל:
עריכה, חיפוש -> חפש בקבצים
ותמצא את הטקסט הזה "OnInitDialog"
עכשיו, אם מצאת אז ס22ה, קפוץ הלאה, אם לא:

תפתח את הקובץ
MultiDlg.cpp
נראה לי שזה הקובץ שלך, קיצור יש רק קובץ אחד שמסתיים בdlg.cpp
אוקי?
קיצור פתחת אותו, עכשיו תלחץ על
VIEW -> PROPERTIES WINDOW
עכשיו הופיע אצלך חלון המאפיינים, תעמוד איפשהו בטקסט של הקובץ שאמרתי לך לפתוח, למשל הפונקציה OnPaint אם אתה מתקשה למצוא תעשה חיפוש במסמך!

עכשיו אתה עומד בתוך הקלאסס הזה (אפשר גם דרך הCLASS VIEW) המאפיינים שיופיעו בPROPERTIES WINDOW הם של הקלאסס, בחלון של המאפיינים יש כפתור למעלה, בצורה של מעויין ירוק קטן כזה, תלחץ שם, עכשיו תמצא את הפונקציה
OnInitDialog
תלחץ על המקום הריק לידה, ותלחץ על ADD
אם כתובה לך שם האופציה EDIT אז היא כבר קיימת

בחייאת, אם תעשה הכל לפי מה שכתוב פה אין סיכוי שאתה רוצה להצליח ולא הצלחת, תקרא שוב אם לא הבנת...

עכשיו, כשמצאת את הפונקציה
OnInitDialog
יש לה }{ נכון? (גוף) שנייה לפני הRETURN של הפונקציה, אתה צריך להוסיף את מה שאתה רוצה, את הקוד שדיברנו עליו, זה הכל!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   13:13   28.11.02   
אל הפורום  
  25. תקשיב..  
בתגובה להודעה מספר 24
 
   עשיתי כל מה שאמרת לי, מצאתי את הפונקציה הזאת כבר מזמן (OnInitDialog), הוספתי את השורה:

SetWindowPos( NULL, 0 ,0 ,1000 ,500 ,SWP_SHOWWINDOW );

הוספתי אותה בדיוק לפני ה- Return True של הפונקציה


BOOL CMuliDlg::OnInitDialog()

וזה פשוט נותן לי error. אני לא מבין מה הבעיה של זה כי עשיתי בדיוק מה שאמרת, ודרך אגב, זה עובד על חלון אחר שיש לי ( CAboutDlg ) ושם באמת אחרי שלחצתי על המעויין הירוק ראיתי את הפונקציה OnInitDialog, אבל ב- Class View היתה פונקציה (עם icon של מלבנים בצהוב, סגול ותכלת) ל-CAboutDlg, וגם ל-CMultiApp, אבל אין שם CMuliDlg.
אולי בגלל שזה החלון שכבר יש לי בזמן העיצוב, עוד לפני שני מריץ את התוכנית?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   18:43   28.11.02   
אל הפורום  
  26. אוקי, הגיע הזמן להשתמש בפונקציה  
בתגובה להודעה מספר 25
 
   MoveWindow(1,1,100,100,SW_SHOW);


לי זה תמיד פועל.........


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DrDeath

   20:27   28.11.02   
אל הפורום  
  27. או הו....  
בתגובה להודעה מספר 26
 
   נראה לי שזה אמור היה לעבוד אבל מרוב בלגאן יש כאן בעיה חדשה ב-Linker.
קראתי בhelp ואני לא יודע איך לתקן את התקלה:
Muli error LNK2001: unresolved external symbol "protected: virtual int __thiscall CMuliApp::InitApplication(void)" (?InitApplication@CMuliApp@@MAEHXZ)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Boaz_fr

   18:48   30.11.02   
אל הפורום  
  28. בדיוק צה שאמרתי לך קודם  
בתגובה להודעה מספר 27
 
   הוספת את הפונקציה ללא ה"הדר" שלה
בכלל מומלץ לא להוסיף "הודעות windows" בMFC לךא שימוש בClass Wizard אלא אם אתה יודע היטב מה אתה רוצה לעשות,
לך, תבדוק איך מוסיפים פונקציה (הודעה) לClass דרך הWizard וחיים שלך יהיו פשוטים הרבה יותר
s22Boaz_frs33


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net