Avatar billede yates Nybegynder
22. februar 2007 - 11:11 Der er 1 kommentar

Edit control: Addere tekst

Hej,

Jeg har lavet en edit med CreateWindowEx og vil gerne have en funktion til at addere tekst (via en char* P) udover den tekst som allerede findes.
Jeg kan ikke finde en macro eller API som gør dette for mig.

Det lader sig principielt gøre på en hjernedød måde:
1. Find længde af eksisterende text vha WM_gettext.
2. Find længde af ny tekst vha strlen(P).
3. Malloc en ny Buffer med størrelse svarende til gammel plus ny text og kør begge dele over i den.
4. Brug WM_settext på Edit med en pointer til Buffer som argument
5. free Buffer og færdig

Meeeeeen: Det kunne jo være jeg har overset en eller anden quick og beskidt måde. Nogen der ved noget??

Sproget er C, ikke C++.
Mange tak for svaret.
Yates
Avatar billede yates Nybegynder
22. februar 2007 - 13:09 #1
Hehe,

dette er speget.
Man kan åbenbart bruge message EM_REPLACESEL, hvis man forudgående sørger for at der ikke er nogen selection. Dette sikres med EM_SETSEL.

Men ingen løsninger uden nedture - hvis jeg vil addere 2 linjer som fx "Skinke\nMedister\n", så accepteres ikke \n som newline karakter (der kommer bare et forkert tegn). Det hjælper heller ikke at bruge \r.
Mao, min Edit fatter ikke escape seqs. Hvis jeg først adderer tekst, og så derefter selve ascii(13) og/eller ascii(10) så er resultatet nøjagtigt det samme. Træls.

Suma summarum: Nu ved jeg hvordan jeg kan addere tekst, men ikke hvis denne tekst er lavet af linjer. 

Hvis nogen kan komme med gode ideer så sig endelig til.

Flg. kan evt. bruges som inspiration:

1000 tak.
Y.



int Edit_AddText(HWND hEdit, char* txt)
{
    //deselect everything foist
       
    SendMessage(hEdit,
                (UINT) EM_SETSEL,
                (WPARAM) -1,
                (LPARAM) 0);
   
   
    SendMessage(hEdit,
                (UINT) EM_REPLACESEL,
                (WPARAM) FALSE,
                (LPARAM) txt);
}

int Edit_AddLine(HWND hEdit, char* txt)
{
               
    char* Newline = "\r"; //eller "\n" eller "\n\r" etc - samme resultat
    Edit_AddText(hEdit, txt);
    Edit_AddText(hEdit, Newline);           
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester