Re: consulta sobre utilizacion SysLink y LITEM Struct (SOLUCIONADO)

Iniciado por xkiz ™, 9 Julio 2011, 01:05 AM

0 Miembros y 1 Visitante están viendo este tema.

xkiz ™

bue estoy en un projecto en el cual, tengo que poner un Link a un sitio, por lo cual estoy usando un Syslink, pero me surgio un problemita, necesito obtener el Vinculo del texto del Syslink, hay una forma de hacerlo por lo que busque y es LITEM Structure, pero obiamente algo estoy haciendo mal ni me detecta el LITEM. y me tare, ¿alguie n ha usado este control antes?
podria sacar el vinculo desde una variable de por ahi, pero como el projecto no esta terminado y me alta mucho, ese vinculo puede cambiar, y quiero linkearlo estrictamente al texto del control y no sacarlo de una variable de otro lado.

se que tengo que hacer un SendMessage con LM_GETITEM i el pointer de LITEM,
pero hasta ahi llego, no se omo seguir.

no quiero usar un control static por que seria un bardo formatearlo y esas cosas, preferiria uar el SysLink...



Program's Lang : C++
AppType: WinApi
Lang Version: 6.0
IDE: Visual Studio 6.0


xkiz ™

perdon que repostee pero no keria editar el post anterior.

Código (cpp) [Seleccionar]

LITEM item;
WCHAR szID[MAX_LINKID_TEXT];
WCHAR szUrl[L_MAX_URL_LENGTH];

item.mask = LIF_ITEMINDEX|LIF_URL;
item.iLink = 0;
item.szUrl = szUrl;
SendMessage(GetDlgItem(hwnd, IDC_WWW), LM_GETITEM,0, (LPARAM)&item);
//////////////////////////////////////////////////////////////////////////////////////////
MessageBox(NULL, (LPCTSTR)szUrl,"", MB_OK);


aca me aparecio un error, no entiendo como arreglar:[item.szUrl = szUrl;]: : error C2440: '=' : cannot convert from 'char [2]' to 'unsigned short [2084]'

el valor de asignacion es el mismo type que el valor a extraer y no se por que da ese error.
pero si saco el item.szUrl, me devuelve solo la primera letra del vinculo, osea la http://www.google.com.

hasta aca llegue por ahora, como que me falta asignarle un tamaño a la cadena, pero.....

BlackZeroX

#2
.
item.szUrl = szUrl;   //  Son cadenas... No numeros.

strcpy();
memcpy();

pero si quieres algomas estilo VB6 sobrecarga el operador = del tipo WChar y dentro del proceso de sobrecarga realiza los strcpy() o memcpy() como desees (lo mas habitual es que sea con strcpy()  ).

usa memcpy()

Wchar son 2bytes... en esta estructura:

Caracter, NULL = 1 Wchar es decir que Serian 2 char...

Dulces Lunas!¡.
The Dark Shadow is my passion.

xkiz ™

#3


EDIT: lo solucione con WideCharToMultiByte



gracias por responder, hay algo que no entiendo, osea todavia sigo recibiendo un solo caracter del link. aca abajo te dejo un Ej de lo que estoy haciendo, tal vez si lo ves ahi podes ver mejor donde estoy mal.
la idea de usar SysLink la saque del Control Spy





attachment: SysLinkTest.rar (7.79 KB)


BlackZeroX

#4
ammm si mira loq ue obtienes es esto

[h t t p : / / w w w . g o o g l e . c o m ]   <---- asi trabaja el Wchar*

Los espacios son Byte=0 sirven como separadores.

loq ue quieres obtener TU es esto:

[http://www.google.com] <--- Asi trabaja el char*...

[h ] = Wchar
[h]  = char

Para una cadena de Wchar tiene al final un Wchar [  ] vacio byte=0 , byte=0

intenta poner esto:



    int _i,
        _ln = L_MAX_URL_LENGTH,
        _a;
    char *__p_str = NULL;

    _ln        =(_ln>>1); // divicion entre 2...
    __p_str = (char*)malloc(_ln);

    for( _i=0, _a=1; _i<_ln ; _i++ , _a=_a+2)
       __p_str[_i] = szUrl[ _a ];

    fprintf(stdout,"%s",__p_str);
    free( __p_str );

The Dark Shadow is my passion.