Autor Wątek: Implementacja muliline EditBoxa na bazie CDXUTEditBox  (Przeczytany 675 razy)

Offline poczatkujacy_...

  • Użytkownik

# Grudzień 20, 2012, 02:48:54
Witam,
Chciałbym mieć kontrolkę multiline editboxa, ale nie taką domyślną z windowsa, tylko coś na wzór tego co jest w CDXUT utility. Tam jest taka klasa editBoxe ale nie jako multiline tylko implementacja wersji jednoliniowej no i przerabiam na multiline.
De facto przerobiłem wszystkie kontrolki z CDXUTa na mój własny kod zgodnie z moimi potrzebami (ponieważ nie lubię bazować na czyimś nieznanym kodzie) no i działają tak jak chcę i pozostał mi ten nieszczęsny editBox multiline. Jakie są problemy:
1.) w buforze (WCHAR *) przechowujemy teskt, który za pomocą pewnej metody(z argumentem szerokość) dzielę tak aby wpasował się w szerokość editBoxa (czyli pomiędzy granicznymi niemieszczącymi się w 1 linii słowami zastępuję ' ' znakiem '\n'). I taki tekst następnie metodą ID3DXFonta::DrawTextW wpisuje w RECT EditBoxa.
    - problem jest taki że teskt nie jest wyrównany pomiędzy krawędziami editBoxa
    - jak kliknę kursorem myszy przy jakimś znaku to czasami karetka wstawia się perfekcyjnie koło znaku a czasami 2 znaki dalej (podejrzewam że jakby się załatał pierwszy problem to ten by znikł bo zauważyłem pewną zależność dotyczącą niewyrównania)
   - jak przewijam ScrollBarem (inna klasa) editBoxa to co 1 krok przewinięcia znikają mi początkowe litery tesktu w linii (również tutaj podejrzewam, że załatanie 1 być może automatycznie by załatało to)

Ponadto są inne problemy jak niedziałające jeszcze do końca zaznaczanie tekstu, kasowanie znaku czy np. po wpisaniu teskt się chrzani, ale do tych problemów jeszcze nie ma sensu przechodzić, dopóki problemów tych 3 co wyżej się nie rozwiąże. Na wyrównanie (1 problem) ktoś mógłby rzec że po prostu wywołać jakąś funkcję setAlignText czy cos w tym stylu, ale to takie rozwiązanie odpada bo jak wyrównam, to potem gdy klikne kursorem w ediBoxa to nie ma szans by mi karetka się pojawiła przy tym znaku co kliknąłem. To wyrównanie musi być podejrzewam już jakoś w buforze znaków. W swojej implementacji korzystam z tych funkcji ScriptStringAnalyse, ScriptStringCPtoX, ScriptStringXtoCP, ScriptString_pcOutChars. Może tutaj coś jest takiego automatycznego, że się podaje parametr i sam przekształca tak bufor znaków, że są one wyrównane do zadanej szerokości. Ktoś używał kiedyś może tych funkcji i mógłby napisać jakiś pseudokod jakich metod z jakimi parametrami użyć?
« Ostatnia zmiana: Grudzień 20, 2012, 02:51:24 wysłana przez poczatkujacy_directx »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline 0x46415243494...

  • Użytkownik

# Grudzień 20, 2012, 15:17:36
na początek zamiast wstawiania '\n' spróbuj "\r'\n"