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:



Popup okno + uzivatelsky kresleny listbox

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Popup okno + uzivatelsky kresleny listbox

Autor: Kra

18:29:37 19.08.2010

Opozdene, ale prece (k implementaci jsem se dostal az ted).

Diik za napad, slape to jak svycarske hodinky :)

R.

Citovat příspěvek

 

Re: Popup okno + uzivatelsky kresleny listbox

Autor: pleytwak

9:57:33 11.08.2010

vytvoř další popup okno a do toho umísti listbox -> to okno bude parent listboxu a bude dostávat zprávy WM_DRAWITEM a WM_MEASUREITEM

Citovat příspěvek

 

Popup okno + uzivatelsky kresleny listbox

Autor: Kra

9:20:08 11.08.2010

Zdravim ve spolek,

potreboval bych vytvorit uzivatelsky kresleny listbox (ikonka + text). Postupoval jsem dle navodu tady na buildru [url] http://www.builder.cz/art/cpp/uk_listbox_api_2.html [/url], ale mam s tim problem.

Ten problem patrne spociva v tom, ze v onom navodu pouziva autor DialogBox, zatimco ja vytvarim okno pres CreateWindowEx s priznakem WS_POPUP (popup proto, ze potrebuju mit listbox mimo hlavni okno a child to neumoznuje). Tim padem, mi nejako nefunguje zprava WM_DRAWITEM - nikdy ji nic neposle (dle MSDN ji dostava parent window onoho listboxu, ale v tomto pripade zadny parent nastaveny neni).

Kod je cca nasledovne:

[code]//hlavni okno programu
hWnd = CreateWindowEx(0,szAppName, szAppName, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, BOARD_WIDTH, BOARD_HEIGHT, NULL, NULL, hInstance,NULL);

//okno s Listboxem
hHistoryWindow = CreateWindowEx(WS_EX_TOOLWINDOW, L"LISTBOX", L"History", LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | WS_POPUP | WS_BORDER, BOARD_WIDTH, 10, 200, 796, NULL, NULL, hInstance,NULL);

//subclassing listboxu
wndprocLB = (WNDPROC)SetWindowLongPtr(hHistoryWindow, GWLP_WNDPROC, (LONG_PTR)WindowProcListBox);[/code]

Dale v jedne ze zprav toho hlavniho okna volam:
[code]
LRESULT Polozka = SendMessage(hHistoryWindow, LB_ADDSTRING, 0, (LPARAM) L"bla");
HICON hIcon = LoadIcon (g_hiMainWindow, MAKEINTRESOURCE(IDI_WHITE_SMALL));
SendMessage(hHistoryWindow, LB_SETITEMDATA, Polozka, (LPARAM)hIcon);
[/code]
A nasleduje procedura okna listboxu:
[code]
switch ( uMsg )
{
case WM_MEASUREITEM:
{
LPMEASUREITEMSTRUCT lpMIS;
lpMIS = (LPMEASUREITEMSTRUCT)lParam;
lpMIS->itemHeight = GetSystemMetrics(SM_CYICON) + 2;
break;
}
case WM_DRAWITEM: //nikdy se nezavola :(
DrawListboxItem((LPDRAWITEMSTRUCT)lParam);
break;
}
return CallWindowProc(wndprocLB, hWnd, uMsg, wParam, lParam);[/code]

Je nekde zrejme, kde delam nejakou blbost?

Diky,

R.

Citovat příspěvek

 

 

 

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

Uživatelské jméno:

Heslo: