Klopot z poprawnym tekstem

0

Mam pytanie dlaczego taki schemat jest bledny:

char s[4];
GetWindowText(hCtrl, s, sizeof(s)); // pobieram tekst z edita lub innej kontrolki

char open[36];
sprintf(txt, "xxx "%c" xxx", s); // chce by tekst pobrany byl w cudzyslowie

MessageBox(hwnd, txt, "tytul", MB_OK); // ale gdy to wyswietlam to jest tam jakis slaczek - co robie zle?

0

po pierwsze: skad ci sie wziela zmienna txt? ale zaloze ze to char open[36] mialo byc char txt[36]
teraz tak:
w sprintf %s a nie %c... %c to jest char, tam podajesz jeden znak i on go wstawia w to miejsce.. a %s to jest string, czyli wstawiany w to miejsce jest string..
poza tym zrob troche miejsca wiecej dla zmiennej s, nie dam glowy czy on dopisuje '\0' na koniec jesli dlugosc napisu przekracza ilosc miejsca
reszta wydaje sie ok

pokoj, Gynv

0
int i=(int)DefWindowProc(hWnd,WM_GETTEXTLENGTH,0,0);
char* winname=(char*)malloc(++i);
if(winname){
  DefWindowProc(hWnd,WM_GETTEXT,i--,(LPARAM)winname); // bezposrednio
  //albo GetWindowText(hWnd,winname,i--); ale to i tak wywoła Post/PeekMessage()
  //... tu robisz swoje; w i masz dlugosc ciagu
  free(winname)
}

char* getwindowtext(HWND hWnd,char* before="",char* after=""){
  int i=(int)DefWindowProc(hWnd,WM_GETTEXTLENGTH,0,0);
  char* winname=(char*)malloc((++i)+strlen(before)+strlen(after));
  if(winname){
    strcpy(winname,before);
    DefWindowProc(hWnd,WM_GETTEXT,i,(LPARAM)(&winname[strlen(before)]));
    //albo GetWindowText(hWnd,&winname[strlen(before)],i);
    strcat(winname,after);
  }
  return winname;
}

void zwolnij(char* winname){
  free(winname);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1