Προς το περιεχόμενο

WIn32 API - Full Screen Window


moukoublen

Προτεινόμενες αναρτήσεις

  • Απαντ. 41
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

+1

 

Περισσότερα προβλήματα ενδέχεται να δημιουργήσει παρά να λύσει! Το modal mode είναι πιστεύω παραπάνω από αρκετό για τη συντριπτική πλειοψηφία των περιπτώσεων.

Δημοσ.

οταν λέμε focus, σαν να λέμε έχουμε ένα πρόγραμμα με κάποια πράγματα και πχ την έχουμε scrollari κάτω(την φόρμα), όταν λοιπών συμβούν διάφορα (όπως αλλαγη παραθυρου) να μην χαθεί το φοκους, δηλαδή όταν γυρίσουμε να είναι scrollarismeno προς τα κάτω ε? μην κάνει να ουμε ρε-παιντ το πρόγραμμα ε? και ξαναπάει πάνω...

 

εε?

Δημοσ.

Όχι, focus εννοούμε εστίαση στο προσκήνιο... να είναι δηλαδή το παράθυρό μας στο προσκήνιο (μπροστά από οποιοδήποτε άλλο).

 

Απορω πως δεν σκεφτηκαν στη Microsoft να βαλουν μια property την οποια οταν θα την οριζεις True να εχει την φορμα παντα σε focus, π.χ. Form1.AlwaysFocus=True. Εφοσον δεν υπαρχει αυτη η property το αποτελεσμα ειναι να χρονοτριβει ο προγραμματιστης ψαχνοντας εδω και εκει και να πρεπει να γραψει μερικες γραμμες κωδικα αντι για μια.

Οι φόρμες έχουν πάντα focus αν τις ορίσεις modal, ή αν τις ανοίξεις με DialogBox().

Δημοσ.

οταν λέμε focus, σαν να λέμε έχουμε ένα πρόγραμμα με κάποια πράγματα και πχ την έχουμε scrollari κάτω(την φόρμα), όταν λοιπών συμβούν διάφορα (όπως αλλαγη παραθυρου) να μην χαθεί το φοκους, δηλαδή όταν γυρίσουμε να είναι scrollarismeno προς τα κάτω ε? μην κάνει να ουμε ρε-παιντ το πρόγραμμα ε? και ξαναπάει πάνω...

 

εε?

 

Αυτό το κάνουν ήδη όλα τα προγράμματα γιατί πολύ απλά πρέπει να γράψεις κώδικα για να μην γίνει έτσι. Εσύ δηλαδή όταν πας από τον browser στον media player και μετά πίσω, ο browser έχει κάνει scroll to top?

 

Όχι, focus εννοούμε εστίαση στο προσκήνιο... να είναι δηλαδή το παράθυρό μας στο προσκήνιο (μπροστά από οποιοδήποτε άλλο).

 

 

Οι φόρμες έχουν πάντα focus αν τις ορίσεις modal, ή αν τις ανοίξεις με DialogBox().

 

Ας μη μπερδεύουμε το input focus με την έννοια του foreground window γιατί άλλα θα εννοεί ο ένας κι άλλα θα καταλαβαίνει ο άλλος.

 

απο αυτά που λέτε πάνω αυτό που λες είναι το TOPMOST,

βασικά τι ζήτησε ο τυπάς ακριβώς..?

 

Όπως μπορείς να διαβάσεις και συ στο post του (γιατί και μεις απο κει το διαβάσαμε), αυτό που θέλει είναι να κάνει ένα window να είναι "foreground αλλά για όλο το σύστημα" (αντί για την εφαρμογή του μόνο) και επίσης να μη μπορεί να αλλάξει αυτό με χειρισμό του χρήστη.

 

Όλα τα υπόλοιπα (πχ topmost) είναι άσχετα με το πρόβλημά του με την έννοια ότι ναι μεν θέλει να το κάνει και αυτό (full screen topmost κλπ), αλλά είναι orthogonal: το ένα δεν επηρρεάζει το άλλο.

Δημοσ.

Για να κάνεις μια φόρμα system modal όπως λέει ο migf1 χρησιμοποιείς την API συνάρτηση SetSysModalWindow. Δεν υπάρχει η δυνατότητα μετάβασης σε άλλη εφαρμογή μέχρι να ξεφορτωθείς το παράθυρο.

Υπάρχουν και άλλες σχετικές συναρτήσεις όπως GetFocus, SetFocus, GetActiveWindow, GetForegroundWindow, SetForegroundWindow κλπ.

Στην Visual Basic την topmost φόρμα που είναι πάντα ορατή την λέμε "always on top".

Δημοσ.

Η SetSysModalWindow από ότι βλέπω εδώ δεν υποστηρίζεται πλέον. Πρόκειται για ρουτίνα που προσέφερε το παλιό 16μπιτο Windows API και από τα W95+ έχει κοπεί, παραμένει στα Header μόνο για συμβατότητα κατά το compile.

Δημοσ.

Ο απλούστερος κι ασφαλέστερος τρόπος για δημιουργία modal φόρμας είναι με κλήση της DialogBox().

 

Αν έχει δημιουργηθεί ως κανονικό παράθυρο με CreateWindow(), μπορεί να επιτευχθεί παραπλήσιο εφέ απενεργοποιώντας τον owner του παραθύρου (ο οποίος σε επίπεδο λογικής μπορεί να συμπίπτει με τον parent, μπορεί όμως και όχι). Αυτό μόνο αν θέλουμε να αλλάξουμε το modality on-the-fly (επειδή κανονικά το modality ορίζεται "εφάπαξ" κατά τη δημιουργία του παραθύρου/φόρμας). Αλλά μπορεί να εισαγάγει δυσάρεστες παρενέργειες σε άλλα τμήματα του κώδικά μας... γενικώς αντενδείκνυται.

 

Γενικώς, για το modality (UI ή code) ρίξτε μια ματιά κι εδώ: http://blogs.msdn.com/b/oldnewthing/archive/2005/02/18/376080.aspx

Δημοσ.

Ωπα της... Διαβαζουμε και the old new things grin.png

 

Και τι δε θα δινα για να δω τις απαντήσεις του Raymond στις ερωτήσεις που ποστάρονται εδώ... :-D Μπορεί ο τύπος να έχει κοινωνικό πρόβλημα αλλά μ' αυτά που διαβάζω κάθε τόσο εδώ τον νιώθω.

 

Επίσης BTW, πρώτον ο OP έχει ήδη λύσει το πρόβλημά του (οπότε τζάμπα παρλαπιπιάζουμε) και δεύτερον δεν ήθελε modal window (δεν αναφέρει καν ότι η εφαρμογή του έχει πάνω από ένα window) αλλά αυτό το υποτιθέμενο "system modal".

Δημοσ.

Και τι δε θα δινα για να δω τις απαντήσεις του Raymond στις ερωτήσεις που ποστάρονται εδώ... :-D Μπορεί ο τύπος να έχει κοινωνικό πρόβλημα αλλά μ' αυτά που διαβάζω κάθε τόσο εδώ τον νιώθω.

 

 

Εγω παντος ανυπομονω να δω ενα ποστ σου στον "μεγιστο ντεβελοπερ". (μαλλον πολλοι εδω μεσα θα ηθελαν κατι τετοιο)

Δημοσ.

Αν και ναι, το θέμα έχει λυθεί...

 

Για το κους κους του ζητήματος :-D :-D ... ποιος είναι ο "μεγιστο ντεβελοπερ";

(Έτσι απλά για να μπαίνω στο κλίμα μιας και νέος στο forum)

Δημοσ.

Ουφφφφ παπί δουλειά μου βρήκες κυριακάτικα!

 

Λοιπόν δεν είχα την παραμικρή ιδέα σε ποιόν αναφέρεσαι, αλλά με λίγο google-fu βρήκα ότι μιλάμε για τον George Delaportas, aka qtgeo και G0D.

 

Μετά έκανα λίγο speed browsing τo online presence του (δεν είναι και δύσκολο να τον βρεις :-D ) και συνειδητοποίησα ότι είναι ο ίδιος τύπος που είχε γράψει 2 post που θυμάμαι να έχω διαβάσει "τώρα πρόσφατα" -- ένα που έλεγε κάτι πίπες για reverse engineering κάποιο Google API (ασχολίαστο) και ένα όντως πρόσφατο που έλεγε για το Alpha Script και είχαν πέσει κάτι σχόλια για God OS κλπ.

 

Εδώ θα σε ξενερώσω λέγοντας ότι παραλίγο να σχολίαζα εκεί (κάτι του στυλ "solution looking for a problem"), αλλά σκέφτηκα ότι δεν έχει κανένα απολύτως νόημα οπότε γιατί να σπαταλάω το χρόνο μου. :rolleyes:

 

Γενικά είναι προφανές ότι το παιδί ξέρει πέντε πράγματα (ίσως και 10 και 15) αλλά είναι λίγο, πως να το θέσω, full of himself. Δεν έχει και πολύ νόημα να ασχολείσαι με τέτοια άτομα πέραν της πλάκας, και όσο για το δούλεμα δε θα το έκανα εκτός κι αν το εκάστοτε topic ήδη είχε πάει κατα διαόλου.

 

Μαγκιά δεν είναι να βάζεις nickname "g0d". Μαγκιά είναι εκεί που κάθεσαι να είσαι ο καλύτερος και να ψάχνεις πώς θα πας εκεί που θα είσαι ο χειρότερος.

 

Edit: τελικά τον έχω διαβάσει περισσότερες φορές απ' όσες νόμιζα. moukoublen, να το link που θέλεις.

 

Edit #2: κατέβασα το τελευταίο tarball του Alpha CMS (v8.2) και το περιεργάστηκα λίγο. Verdict: ξέρει 5 πράγματα αλλά έχει πολλά περιθώρια βελτίωσης ακόμα. Καθαρά από τεχνικής πλευράς, θα έλεγα hire αν ερχόταν για junior dev.

 

Σημαντική λεπτομέρεια: τα στάνταρ μου είναι πολύ υψηλά. Δεν θα έκανα hire ούτε για junior ίσως την πλειοψηφία των ανθρώπων που πληρώνονται για να κάνουν αυτή τη δουλειά στην Ελλάδα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...