Dvs Δημοσ. 24 Δεκεμβρίου 2003 Δημοσ. 24 Δεκεμβρίου 2003 Psaxno ena tutorial pou na exigei pos mporo na dimiourgiso mia forma kai genikotera resources xoris tin xrisi ton WinAPI (me WinAPI to kano alla thelo na matho kai xoris oste na to kano pio grigora :> ) thx
destin Δημοσ. 24 Δεκεμβρίου 2003 Δημοσ. 24 Δεκεμβρίου 2003 den eimai sigouros oti ginete xwris winAPI.Sta windows ola eki odigoun(eite amesa eite emesa)
Dvs Δημοσ. 24 Δεκεμβρίου 2003 Μέλος Δημοσ. 24 Δεκεμβρίου 2003 Eisai sigouros?? Giati palaio edo kai kairo na to kano xoris API kai den vrisko tropo Na min anoisixo dialdi e?
destin Δημοσ. 24 Δεκεμβρίου 2003 Δημοσ. 24 Δεκεμβρίου 2003 Eisai sigouros?? Giati palaio edo kai kairo na to kano xoris API kai den vrisko tropo Na min anoisixo dialdi e? Etsi sibereno kai den exo dei kati diaforetiko mexri stigmis. :?
Dvs Δημοσ. 24 Δεκεμβρίου 2003 Μέλος Δημοσ. 24 Δεκεμβρίου 2003 Exeis kana tutorial/source pou an deixnei pos mporo na fortoso ena resource (to exo sxediasei me to resource editor kai thelo na to fortoso meso WinAPI )???
destin Δημοσ. 25 Δεκεμβρίου 2003 Δημοσ. 25 Δεκεμβρίου 2003 Exeis kana tutorial/source pou an deixnei pos mporo na fortoso ena resource (to exo sxediasei me to resource editor kai thelo na to fortoso meso WinAPI )??? oxi giati exo paratisei edo kai kero ta windows :twisted: sigoura sto net tha vreis info gia afto pou psaxneis
Directx Δημοσ. 25 Δεκεμβρίου 2003 Δημοσ. 25 Δεκεμβρίου 2003 Exeis kana tutorial/source pou an deixnei pos mporo na fortoso ena resource (to exo sxediasei me to resource editor kai thelo na to fortoso meso WinAPI )??? Τι resource είναι ; (Dialog box για παράδειγμα)
Dvs Δημοσ. 25 Δεκεμβρίου 2003 Μέλος Δημοσ. 25 Δεκεμβρίου 2003 Gia DIalogBox as poume Oti kai na exeis kalo mou einai giati ta WinAPI eiani omorfa kai dinata alla theloun poli ora (toulaxiston stin arxi)
GothicCrusader Δημοσ. 25 Δεκεμβρίου 2003 Δημοσ. 25 Δεκεμβρίου 2003 1) DialogBox αν το θες modal 2) CreateDialog αν θες modeless Αν θες να είναι modeless (δηλ στην δεύτερη περίπτωση) τότε πρέπει να τροποποιήσεις και το message loop σου και να καλέσεις την ShowWindow μετά την εκτέλεση της CreateDialog: while (GetMessage (&msg, NULL, 0 ,0)) { ..if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg)) { .....TranslateMessage (&msg); .....DispatchMessage (&msg); ....} } όπου hDlgModeless το handle του dialog σου (ουσιαστικά προωθείς τα messages από το κύριο πρόγραμμά σου στο modeless dialog). Τέσπα, αν θες να το κάνεις modeless πες μου να σου γράψω παραπάνω πάνω σε αυτό. Πάμε για την πρώτη περίπτωση που είναι η πιο συνηθισμένη. Οι παράμετροι είναι (από MSDN): int DialogBox( HINSTANCE hInstance, // handle to application instance LPCTSTR lpTemplate, // identifies dialog box template HWND hWndParent, // handle to owner window DLGPROC lpDialogFunc // pointer to dialog box procedure ); Επομένως: α) στην πρώτη παράμετρο θα πρέπει να στείλεις το application instance. Άρα θα πρέπει να το έχεις αποθηκεύσει από πριν. To application instance υπάρχει ως member μίας structure LPCREATESTRUCT η οποία αποθηκεύεται στο lparam όταν λαμβάνεις WM_CREATE message. Αυτό εξάλλου είναι και το πρώτο που έρχεται στο app σου. Άρα βήμα 1ο: θα πρέπει δηλώσεις μία μεταβλητή στην WndProc σαν static HINSTANCE: eg: static HINSTANCE hMyAppInstance; βήμα 2ο: μόλις δημιουργηθεί το app όταν λάβεις το WM_CREATE μήνυμα αποθηκεύεις το hInstance της δομής, που υπάρχει στο lparam, στην δική σου μεταβλητή. Δεν σε ενδιαφέρει τι τιμή έχει η LPCREATESTRUCT->hinstance. Απλά σε ενδιαφέρει να την αποθηκεύσεις. Φυσικά θα χρειαστείς το ανάλογο type casting: // μέσα στην wndproc σου hMyAppInstance= ((LPCREATESTRUCT) lParam)->hInstance; Περισσότερα για την LPCREATESTRUCT και το WM_CREATE στην MSDN. Μπορείς να φανταστείς ότι όταν εκτελείται μία CreateWindow[Ex], το πρόγραμμά σου ζητάει την «άδεια» από τα windows να δημιουργηθεί μία οντότητα. Αν τα windows θεωρήσουν ότι υπάρχουν τα απαραίτητα resources (που συνήθως αυτό ισχύει) τότε πριν επιστρέψει η συνάρτηση CreateWindow[Ex], τα windows αντιστοιχίζουν στην οντότητα ένα μοναδικό hinstance (=instance handle), παραχωρούν την απαραίτητη διαθέσιμη μνήμη και τέλος στέλνουν το WM_CREATE μήνυμα σε αυτήν όπου στην lparam εμπεριέχεται όσες πληροφορίες χρειάζεται να ξέρει η εφαμοργή για την ταυτότητα της. (μπέρδεμα;; :roll: ). Μετά από όλα αυτά επιστρέφει η CreateWindow με την τιμή του window handle. Φυσικά ένα instance μπορεί να έχει πολλά windows κοκ. β) η δεύτερη παράμετρος είναι το όνομα του resource. Αν π.χ.: //RESOURCE.H MYDIAG DIALOG DISCARDABLE BLA BLA. BEGIN .. END Τότε η δεύτερη παράμετρος θα είναι TEXT("MYDIAG") γ) η τρίτη παράμετρος είναι το handle του parent app σου και ουσιαστικά είναι η τιμή που σου επιστρέφει η CreateWindow κατά την δημιουργία της εφαρμογής. Συνήθως είναι η hwnd. Κοίτα το source code και βρες την πρώτη CreateWindow που εκτελείται. Δες σε ποια μεταβλητή αποθηκεύεται η επιστρεφόμενη τιμή. δ) η τελευταία παράμετρος είναι η συνάρτηση η οποία θα αναλαμβάνει να επεξεργάζεται τα μηνύματα του dialog σου από την στιγμή που θα δημιουργηθεί o dialog. Στην ουσία δεν διαφέρει καθόλου από την wndproc και συντάσσεται με τον ίδιο ακριβώς τρόπο. Απλά αντί να επεξεργάζεσαι τα μηνύματα του βασικού app επεξεργάζεσαι τα μηνύματα του dialog σου. Η πιο ουσιαστική διαφορά που πρέπει να ξέρεις είναι ότι δεν επιτρέφει LRESULT αλλά int. Για την ακρίβεια επιστρέφει true αν το μήνυμα που έλαβε το επεξεργάστηκε ή false αν το μήνυμα που έλαβε δεν χρειάζστηκε να το επεξεργαστεί. Αυτά χρησιμεύουν για το message loop. Προς το παρόν απλά στέλνε σωστά τις τιμές true/false . Το header επομένως αντί για: LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) θα είναι: BOOL CALLBACK mycallbackfunc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) Επομένως τελικά: DialogBox (hMyInstance, TEXT("MYDIAG)", hwnd, mycallbackFunc); Αυτά... Κάποια σελίδα δεν έχω υπόψη μου. btw resource dialog box δεν υπάρχει... υπάρχει resource dialog. Το πώς θα το χρησιμοποιήσεις εξαρτάται από την συνάρτηση με την οποία θα το δημιουργήσεις. (π.χ. το ίδιο resource μπορείς να το χρησιμοποιήσεις είτε ως modal είτε ως modeless)
Dvs Δημοσ. 25 Δεκεμβρίου 2003 Μέλος Δημοσ. 25 Δεκεμβρίου 2003 β) η δεύτερη παράμετρος είναι το όνομα του resource. Αν π.χ.: //RESOURCE.H MYDIAG DIALOG DISCARDABLE BLA BLA. BEGIN .. END Τότε η δεύτερη παράμετρος θα είναι TEXT("MYDIAG") Auto arkouse Auto epsaxna toso kairo kai den to evlepa pouthena (i den anoiga ta matia mou na to do)!!! tha to koitaxo aurio to proi giati me exei talaiporisei poli i oli istoria nasai kala
Directx Δημοσ. 26 Δεκεμβρίου 2003 Δημοσ. 26 Δεκεμβρίου 2003 btw resource dialog box δεν υπάρχει... υπάρχει resource dialog. Το πώς θα το χρησιμοποιήσεις εξαρτάται από την συνάρτηση με την οποία θα το δημιουργήσεις. Από συνήθεια το λέω dialog-box μιας και χρησιμοποιώ αρκετά το ομώνυμο macro .. :idea: :idea: :idea:
GothicCrusader Δημοσ. 26 Δεκεμβρίου 2003 Δημοσ. 26 Δεκεμβρίου 2003 k no prob ...ας είναι λοιπόν τα υπόλοιπα αναφορά για άλλους (;;. Όσον αφορά το api για δική μου ευκολία έκανα μία μικρή περίληψη των messages και των winapi συναρτήσεων σε δύο αρχεία pdf. Παρόλα αυτά εννοείται ότι η σύνταξη δεν εξηγείται. Προϋποθέτει δηλαδή ότι ξέρει κάποιος να χρησιμοποιεί το msdn καθώς και ότι ξέρει πώς λειτουργούν τα messages loops από parents σε childs Τέσπα, αν θέλετε να του ρίξετε καμία ματιά μπορείτε στο briefcase.pathfinder.gr/view/pagedown. Όχι ότι είναι και τόσο ιδιαίτερα προσεγμένο ούτε και ότι μπορεί κανείς να καλύψει το api. Απλά έχει τα βασικά. Μπορεί και να θέλει και κάνα δίμηνο ..debbuging:)
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.