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

Σχετικα με string (STL)


Evgenios1

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

Δημοσ.

Αναφερομαι σε c++

 

Εχω το παρακατω

>__inline std::wstring Window::GetTitle()
{
WCHAR tmp[256];
return std::wstring(tmp,tmp + GetWindowTextW(this->hWnd,tmp,255));
}

Υπαρχει αλλος τροπος υλοποιησεις της παραπανω χωρις bufferaki ;

Δημοσ.

Από την στιγμή που το Windows API είτε μέσο της GetWindowText(W) ή μέσο του μηνύματος WM_GETTEXT (και άλλων συμβατών μηνυμάτων) επιστρέφει πάντα το αποτέλεσμα σε buffer, χλομό να το αποφύγεις.

Επίσης καλό είναι να ορίζεις δυναμικά το μέγεθος του tmp με την βοήθεια της GetWindowTextLength ώστε να έχεις την σωστή ονομασία του παράθυρου σε κάθε πιθανή (έστω και ιδιόρρυθμη) περίπτωση.

Δημοσ.
Αναφερομαι σε 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ιο ουσιώδες ερωτήσεις με θέματα σχεδίασης.

Δημοσ.

:-) Ευχαριστω και τους δυο.

>__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, Εχω ενα περιεργο προβλημα με εναν πολυμορφισμο.

 

Λοιπον εχω αυτες εδω τις κλασεις

post-103086-129063120059_thumb.jpg

 

Το περιεργο, μεσα στη basewindow εχω εναν vector<icontrol>, και για καποιο λογο οταν φτιαχνω ενα button (class) και το βαζω μεσα εκει, χανεται ο handler. Να και μερικες φοτο απο το debug

post-103086-129063120044_thumb.jpg

post-103086-129063120056_thumb.jpg

Μονο ο handler χανεται, τιποτα αλλο... Τι στο καλο παιζει;

Δημοσ.
:-) Ευχαριστω και τους δυο.

>__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.

Δημοσ.

Καλύτερα με αυτό;

>
__inline std::wstring Window::GetTitle()
{
 int sz = GetWindowTextLengthW(this->hWnd);
 std::wstring str('\0', sz + 1);
 GetWindowTextW(this->hWnd, &(str[0]), sz);
 return str;
}

Δημοσ.

Είναι sequence container και άρα έχεις το guarantee ότι είναι allocated σε contiguous space. Το ίδιο με το να έχεις ένα vector με κάποιο primitive type και να παίρνεις τη διεύθυνση κάποιου στοιχείου.

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

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

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