duda sobre strstr en c++ (WinApi)

Iniciado por xkiz ™, 22 Septiembre 2011, 15:08 PM

0 Miembros y 4 Visitantes están viendo este tema.

xkiz ™

hola gente, "trabajando" en un proyecto me tope con un problema tal vez un poco tonto pero la verdad, ya mi cabeza esta quemada y la verdad es que no me sale, por lo que vi en cplusplus el ejemplo de uso no es difícil pero me blockie y puf.

bue, estoy armando un menú el cual saco los string de cada ítem desde el recursos, hasta ahí todo bien, el tema es que entre estos string hay uno que es "aaaa & bbb" por ejemplo, contiene un carácter "&" el cual no logro hacer visible entre el texto del menú.
se que estos caracteres como & van antecedidos por el carácter "\" para que sean visibles, pero ese mismo string lo uso como titulo de la ventana.

googleando me tope con este ejemplo strstr y por lo que vi es simple el uso, pero no me sale

Código (cpp) [Seleccionar]

TACHAR szTitle[50];
char dumy[30];
char * pch;

LoadString(hInst, 10, szTitle, sizeof(szTitle));
pch = strstr (szTitle,"&");
strncpy (pch,"&&",2);

AppendMenu(hMenu, MF_GRAYED, 0, dumy);


el resultado de eso es "aaaa &bbb".
ya me trabe y necesito ayuda con esto, me pudo.
pls help


naderST

A ver si entiendo bien tu resultado debería ser el siguiente:

"aaaa & bbb"

y no:

"aaaa &bbb"

xkiz ™

si, osea ese mismo string szTitle lo uso para hacer un WM_SETTEXT y se visualiza bien así como esta en el String Table "aaaa & bbb" pero al pasarlo a un ítem del menú el carácter & se usa para poner el subrayado en una palabra, yo lo que necesito es que aparezca el carácter "&"

Lambda

#3
Prueba ponerlo duplicado "Texto && Mas Texto"

xkiz ™

si podría ponerlo así, pero después entro en el mismo problema a la inversa, por que en el menú me queda bien, pero en la barra de titulo [SendMessage(hWnd, WM_SETTEXT,0, (LPARAM)dumy);] me queda con 2 "&", y para complicarmela un poco mas ese mismo texto lo tengo de tooltip del systry.
si le pongo "aaaa &&& bbb" tendría que restarle "&&" a donde le hago WM_SETTEXT...

me metí en un quilombo innecesario al cuete, help!

naderST

Podrías hacer lo siguiente dejarlo como lo tenías en un principio y hacer una función strreplace como la de php no se si sabes como es, y reemplazas el & por && cuando vayas a asignarle el texto al menú y listo.

xkiz ™

es lo que trato de hacer pero no me sale, osea en si tengo que hacer esto, sea para sumar & o bien para sacar & exedentes, e tema es que no se k procedimiento usar para esto, yo puse strstr por que es lo 1º que se me ocurrio, pero escucho sugerencias.

naderST


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char *strreplace(const char * str, const char * find, const char * replace){
int i,j,k, flag, pos = -1;
int bytes = strlen(str)-strlen(find)+strlen(replace);
char * nstr = (char*)malloc(bytes+1);
memset(nstr, 0, bytes+1);

for(i = 0; i <= strlen(str)-strlen(find); i++){
flag = i;
k = 0;
for(j=i; j<=(i+strlen(find)-1); j++){
if(find[k] != str[j])
flag = -1;
k++;
}

if(flag != -1)
pos = flag;
}

    int size = pos + strlen(replace) - 1;
    int oldsize = pos + strlen(find);
int cont = 0;
j = 0;

    for(i=0;i<=bytes-1;i++){
        if(i>=pos && i<=size){
            nstr[i] = replace[cont];
            cont++;
            if(i==size)
                j=oldsize;
        } else {
            nstr[i] = str[j];
            j++;
        }
    }

return nstr;
}

int main(){
char * reemplazo = strreplace("Texto & texto", "&", "&&");
printf("%s\n" ,reemplazo);
free(reemplazo);

return 0;
}


Fíjate si mi función de strreplace te funciona...

xkiz ™

la verdad si me sirvió, ahora tengo que analizar lo que hacer para ver si logro entender la lógica.


gracias

Karman

Cita de: xkiz ™ en 22 Septiembre 2011, 15:08 PMbue, estoy armando un menú el cual saco los string de cada ítem desde el recursos, hasta ahí todo bien, el tema es que entre estos string hay uno que es "aaaa & bbb" por ejemplo, contiene un carácter "&" el cual no logro hacer visible entre el texto del menú.
se que estos caracteres como & van antecedidos por el carácter "\" para que sean visibles, pero ese mismo string lo uso como titulo de la ventana.

quien te dijo que tenes que agregarle "\" ? el caracter "&" no tiene nada especial... si no te aparece subrayado debe ser por otra cosa y con respecto a tu ejemplo:

Citar"aaaa & bbb"

eso no va a funcionar por el espacio en blanco... a lo sumo "aaaa &bbb".

esta es la función encargada de dibujar los strings en los menús: DrawTextEx

fijate la parte de DT_PREFIXONLY

S2