Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



vector LPARAM

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: vector LPARAM

Autor: Bufo

13:04:49 15.01.2010

Tak to jsem nevěděl.. děkuji :)

Citovat příspěvek

 

Re: vector LPARAM

Autor: JiriValerian

12:38:35 15.01.2010

[color=#008000]Bufo Napsal:
-------------------------------------------------------
> error C2039: 'SendDlgItemMessageA' : is not a
> member of 'CFormular'
>
> tak nevím, čím to je...
> [/color]

Je to tím jak zmínil pan Chalupa a správně jste to tedy měl použít takto:
[size=14px][code]vector[color=#800000]<[/color]string[color=#800000]>[/color] f[color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color][color=#800080]"mroz"[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color][color=#800080]"paprika"[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color][color=#800080]"letadlo"[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color][color=#800080]"kalkulacka"[/color][color=#800000])[/color][color=#800000];[/color]
i [color=#800000]=[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#0000FF]while[/color] [color=#800000]([/color]i[color=#800000]<[/color]f[color=#800000].[/color]size[color=#800000]([/color][color=#800000])[/color][color=#800000])[/color] [color=#800000]{[/color]
[color=#800000]:[/color][color=#800000]:[/color]SendDlgItemMessageA[color=#800000]([/color]formular[color=#800000]-[/color][color=#800000]>[/color]m_hwnd[color=#800000],[/color]IDC_COMBO_TI[color=#800000],[/color]CB_ADDSTRING[color=#800000],[/color][color=#0000FF]0[/color][color=#800000],[/color][color=#800000]([/color]LPARAM[color=#800000])[/color][color=#800000]([/color]f[color=#800000].[/color]at[color=#800000]([/color]i[color=#800000])[/color][color=#800000].[/color]c_str[color=#800000]([/color][color=#800000])[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
i[color=#800000]+[/color][color=#800000]+[/color][color=#800000];[/color]
[color=#800000]}[/color][/code][/size]

[size=20px][color=#000080][b]Upozornění[/b][/color][/size]

To. že používáte přímo [b]formular->SendDlgItemMessageW[/b] může být bráno jako chyba, protože pokud si někdy v budoucnu ten Váš projekt budete chtít přeložit v [b]ANSI[/b] a vypnete si v nastavení projektu překlad pro [b]UNICODE[/b], tak vám to díky tomuto zápisu bude hlásit chybu.

Když chcete používat ať už [b]string nebo wstring[/b] ze [b]STL[/b] pak byste měl správně použít [b]tstring[/b] viz níže, který se automaticky bude mapovat podle nastavení překladu projektu při [b]ANSI na string[/b] a při [b]UNICODE na wstring[/b], dále makro [b]_T[/b], které zajišťuje správné mapování literálů a jen čistý název [b]formular->SendDlgItemMessage[/b] tj. [b]bez A i W[/b] na konci názvu funkce takto:
[size=14px][code][color=#0000FF]typedef[/color] std[color=#800000]:[/color][color=#800000]:[/color]basic_string[color=#800000]<[/color] TCHAR [color=#800000]>[/color] tstring[color=#800000];[/color]
[color=#0000FF]#ifdef[/color] _UNICODE
[color=#0000FF]#define[/color] tstring [color=#0000FF]wstring[/color]
[color=#0000FF]#else[/color]
[color=#0000FF]#define[/color] tstring [color=#0000FF]string[/color]
[color=#0000FF]#endif[/color]

[color=#800000].[/color][color=#800000].[/color][color=#800000].[/color]

vector[color=#800000]<[/color]tstring[color=#800000]>[/color] f[color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color]_T[color=#800000]([/color][color=#800080]"mroz"[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color]_T[color=#800000]([/color][color=#800080]"paprika"[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color]_T[color=#800000]([/color][color=#800080]"letadlo"[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
f[color=#800000].[/color]push_back[color=#800000]([/color]_T[color=#800000]([/color][color=#800080]"kalkulacka"[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
i [color=#800000]=[/color] [color=#0000FF]0[/color][color=#800000];[/color]
[color=#0000FF]while[/color] [color=#800000]([/color]i[color=#800000]<[/color]f[color=#800000].[/color]size[color=#800000]([/color][color=#800000])[/color][color=#800000])[/color] [color=#800000]{[/color]
formular[color=#800000]-[/color][color=#800000]>[/color]SendDlgItemMessage[color=#800000]([/color]IDC_COMBO_TI[color=#800000],[/color] CB_ADDSTRING[color=#800000],[/color] [color=#0000FF]0[/color][color=#800000],[/color] [color=#800000]([/color]LPARAM[color=#800000])[/color][color=#800000]([/color]f[color=#800000].[/color]at[color=#800000]([/color]i[color=#800000])[/color][color=#800000].[/color]c_str[color=#800000]([/color][color=#800000])[/color][color=#800000])[/color][color=#800000])[/color][color=#800000];[/color]
i[color=#800000]+[/color][color=#800000]+[/color][color=#800000];[/color]
[color=#800000]}[/color][/code][/size]V takovémto případě se to vždy namapuje správně buď na ANSI nebo UNICODE podle aktuálního nastavení projektu.

Citovat příspěvek

 

Re: vector LPARAM

Autor: RadekChalupa

7:44:58 15.01.2010

Pokud CFormular je ATL/WTL/MFC okno, tak má "pouze" metodu SendDlgItemMessage, která je podle nastavení Unicode "mapovaná" na W nebo A variantu té API funkce. Takže v případě nastavení projektu pro Unicode sestavení musíš použít přímo tu API funkci:
::SendDlgItemMessageA(formular->m_hwnd, ....);

PS. Osobně jsem v žádném skutečném programu string nepoužil (STL vůbec mi k srdci nepřirostla a až na pár výjimek kde jsem ji použil - většinou vector nebo nějaké funkce z math) se jí vyhýbám. Pokud je projekt v ATL, WTL, MFC, je na stringy mnohem lepší CString. Narozdíl od string má např. metody LoadString a Format a také samozřejmě existují varianty CStringW a CStringA, které lze libovolně kombinovat a použít mj. pro jednoduchý převod textu z ANSI do Unicode a naopak.

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, Win32 API, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Citovat příspěvek

 

Re: vector LPARAM

Autor: Bufo

0:10:14 15.01.2010

error C2039: 'SendDlgItemMessageA' : is not a member of 'CFormular'

tak nevím, čím to je.. ale wstring mi stačí :)

Citovat příspěvek

 

Re: vector LPARAM

Autor: JiriValerian

22:21:56 14.01.2010

[color=#008000]Bufo Napsal:
-------------------------------------------------------
> ha.. funguje.. Děkuji.
>
> Visual studio mi u wstringu nerozbalilo funkce a
> tak jsem usoudil, že tam c_str() neni..
>
> Nevím přesně proč nemohu SendDlgItemMessageA()
> použít, ale asi to bude tím, že ComboBox je
> součástí dialogu.[/color]

To, že je součástí dialogu nevadí. Klidně zkuste použít [b]string[/b]
a [b]SendDlgItemMessageA[/b] a uvidíte, že i tak to bude fungovat ;).

Citovat příspěvek

 

Re: vector LPARAM

Autor: Bufo

22:18:59 14.01.2010

ha.. funguje.. Děkuji.

Visual studio mi u wstringu nerozbalilo funkce a tak jsem usoudil, že tam c_str() neni..

Nevím přesně proč nemohu SendDlgItemMessageA() použít, ale asi to bude tím, že ComboBox je součástí dialogu.

Citovat příspěvek

 

Re: vector LPARAM

Autor: JiriValerian

22:02:48 14.01.2010

[color=#008000]Bufo Napsal:
-------------------------------------------------------
> Aha..Za co bych mohl string vhodně nahradit?
> Zkouším wstring, ale nedaří se mi to. Chybí mi
> něco jako funkce c_str() .. funkci
> SendDlgItemMessageA nemohu použít.[/color]

[b]wstring[/b] obsahuje také metodu [b]c_str()[/b], a ta v jeho případě vrací [b]UNICODE[/b], ale text do něj musíte vkládat jako [b]UNICODE[/b] a ne [b]ANSI[/b]. Takže pokud trváte na [b]SendDlgItemMessageW[/b] tak by to mělo vypadat takto:
[code]vector f;
f.push_back(L"mroz");
f.push_back(L"paprika");
f.push_back(L"letadlo");
f.push_back(L"kalkulacka");
i = 0;
while (i formular->SendDlgItemMessageW(IDC_COMBO_TI, CB_ADDSTRING, 0, (LPARAM)(f.at(i).c_str()));
i++;
}[/code]

Citovat příspěvek

 

Re: vector LPARAM

Autor: Bufo

21:23:33 14.01.2010

Aha..Za co bych mohl string vhodně nahradit? Zkouším wstring, ale nedaří se mi to. Chybí mi něco jako funkce c_str() .. funkci SendDlgItemMessageA nemohu použít.

Citovat příspěvek

 

Re: vector LPARAM

Autor: JiriValerian

20:33:45 14.01.2010

[color=#008000]Bufo Napsal:
-------------------------------------------------------
> Chci načítat řetězce z vektoru do comboboxu.
> Zkoušim to mimo jiné takto.
>
> vector f;
> f.push_back("mroz");
> f.push_back("paprika");
> f.push_back("letadlo");
> f.push_back("kalkulacka");
>
> while (i> formular->SendDlgItemMessageW(IDC_COMBO_TI, CB_ADDSTRING, 0, (LPARAM)f.at(i).c_str());
> i++;
> }
>
> Ale místo správného textu se mi vypíšou nesmyslný
> znaky, snad čínské či co..[/color]

[b]string[/b] je [b]ANSI[/b] a ne [b]UNICODE[/b] zatímco [b]SendDlgItemMessageW[/b] očekává [b]UNICODE[/b] a ne [b]ANSI[/b]. Takže namísto [b]SendDlgItemMessageW[/b] použijte [b]SendDlgItemMessageA[/b] a před tím cyklem [b]while[/b] nevidím inicializaci [b]i na 0[/b]. Doufám, že jste tu inicializaci proměnné [b]i[/b] tady jen zapomněl napsat a že ve zdrojáku ji máte.

Citovat příspěvek

 

vector LPARAM

Autor: Bufo

18:15:59 14.01.2010

Chci načítat řetězce z vektoru do comboboxu. Zkoušim to mimo jiné takto.

[quote]

vector f;
f.push_back("mroz");
f.push_back("paprika");
f.push_back("letadlo");
f.push_back("kalkulacka");

while (i formular->SendDlgItemMessageW(IDC_COMBO_TI, CB_ADDSTRING, 0,
(LPARAM)f.at(i).c_str());
i++;
}

[/quote]

Ale místo správného textu se mi vypíšou nesmyslný znaky, snad čínské či co..

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: