Evgenios1 Δημοσ. 12 Σεπτεμβρίου 2010 Δημοσ. 12 Σεπτεμβρίου 2010 Αναφερομαι σε c++ Εχω το παρακατω >__inline std::wstring Window::GetTitle() { WCHAR tmp[256]; return std::wstring(tmp,tmp + GetWindowTextW(this->hWnd,tmp,255)); } Υπαρχει αλλος τροπος υλοποιησεις της παραπανω χωρις bufferaki ;
Directx Δημοσ. 12 Σεπτεμβρίου 2010 Δημοσ. 12 Σεπτεμβρίου 2010 Από την στιγμή που το Windows API είτε μέσο της GetWindowText(W) ή μέσο του μηνύματος WM_GETTEXT (και άλλων συμβατών μηνυμάτων) επιστρέφει πάντα το αποτέλεσμα σε buffer, χλομό να το αποφύγεις. Επίσης καλό είναι να ορίζεις δυναμικά το μέγεθος του tmp με την βοήθεια της GetWindowTextLength ώστε να έχεις την σωστή ονομασία του παράθυρου σε κάθε πιθανή (έστω και ιδιόρρυθμη) περίπτωση.
m1cRo Δημοσ. 12 Σεπτεμβρίου 2010 Δημοσ. 12 Σεπτεμβρίου 2010 Αναφερομαι σε c++ Εχω το παρακατω >__inline std::wstring Window::GetTitle() { WCHAR tmp[256]; return std::wstring(tmp,tmp + GetWindowTextW(this->hWnd,tmp,255)); } Υπαρχει αλλος τροπος υλοποιησεις της παραπανω χωρις bufferaki ; >__inline std::wstring Window::GetTitle() { std::wstring str(255,0); GetWindowTextW(this->hWnd,&str.at(0),str.size()); return str; } Το ίδιο πράγμα βασικά. Άντε περιμένω πoιο ουσιώδες ερωτήσεις με θέματα σχεδίασης.
Evgenios1 Δημοσ. 12 Σεπτεμβρίου 2010 Μέλος Δημοσ. 12 Σεπτεμβρίου 2010 Ευχαριστω και τους δυο. >__inline std::wstring Window::GetTitle() { /* WCHAR tmp[256]; return std::wstring(tmp,tmp + GetWindowTextW(this->hWnd,tmp,255)); */ int sz = GetWindowTextLengthW(this->hWnd); WCHAR *t = new WCHAR[sz]; GetWindowTextW(this->hWnd,t,sz); std::wstring str(t,t+sz); delete[] t; return str; } Btw, Εχω ενα περιεργο προβλημα με εναν πολυμορφισμο. Λοιπον εχω αυτες εδω τις κλασεις Το περιεργο, μεσα στη basewindow εχω εναν vector<icontrol>, και για καποιο λογο οταν φτιαχνω ενα button (class) και το βαζω μεσα εκει, χανεται ο handler. Να και μερικες φοτο απο το debug Μονο ο handler χανεται, τιποτα αλλο... Τι στο καλο παιζει;
m1cRo Δημοσ. 13 Σεπτεμβρίου 2010 Δημοσ. 13 Σεπτεμβρίου 2010 Ευχαριστω και τους δυο. >__inline std::wstring Window::GetTitle() { /* WCHAR tmp[256]; return std::wstring(tmp,tmp + GetWindowTextW(this->hWnd,tmp,255)); */ int sz = GetWindowTextLengthW(this->hWnd); WCHAR *t = new WCHAR[sz]; GetWindowTextW(this->hWnd,t,sz); std::wstring str(t,t+sz); delete[] t; return str; } Btw, Εχω ενα περιεργο προβλημα με εναν πολυμορφισμο. Λοιπον εχω αυτες εδω τις κλασεις [ATTACH]34743[/ATTACH] Το περιεργο, μεσα στη basewindow εχω εναν vector<icontrol>, και για καποιο λογο οταν φτιαχνω ενα button (class) και το βαζω μεσα εκει, χανεται ο handler. Να και μερικες φοτο απο το debug [ATTACH]34741[/ATTACH] [ATTACH]34742[/ATTACH] Μονο ο handler χανεται, τιποτα αλλο... Τι στο καλο παιζει; Είναι λίγα αυτά που μας δείχνεις. Ανέβασε τον κώδικα κάπου και θα σου πω. Επίσης τα interfaces δεν πρέπει να περιέχουν members αν θες κάτι με members τότε φτιάχνεις abstract class.
Evgenios1 Δημοσ. 13 Σεπτεμβρίου 2010 Μέλος Δημοσ. 13 Σεπτεμβρίου 2010 Ok ok. Μπερδεύτηκα με το allocation . Για το abstrac που λες, τι να πω, νομιζα οτι και αυτο παιρνει το prefix I.
dop Δημοσ. 15 Σεπτεμβρίου 2010 Δημοσ. 15 Σεπτεμβρίου 2010 Καλύτερα με αυτό; > __inline std::wstring Window::GetTitle() { int sz = GetWindowTextLengthW(this->hWnd); std::wstring str('\0', sz + 1); GetWindowTextW(this->hWnd, &(str[0]), sz); return str; }
Evgenios1 Δημοσ. 15 Σεπτεμβρίου 2010 Μέλος Δημοσ. 15 Σεπτεμβρίου 2010 Ειναι safe; Δε μου αρεσει να βλεπω εναν κοντεϊνερ ως δεικτη
dop Δημοσ. 15 Σεπτεμβρίου 2010 Δημοσ. 15 Σεπτεμβρίου 2010 Είναι sequence container και άρα έχεις το guarantee ότι είναι allocated σε contiguous space. Το ίδιο με το να έχεις ένα vector με κάποιο primitive type και να παίρνεις τη διεύθυνση κάποιου στοιχείου.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.