Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI, C++] ListView - dodawanie ikon do wierszy

Ostatnio zmodyfikowano 2011-08-04 18:41
Autor Wiadomość
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-03 15:24:59
wiem, żartowałem tylko :P ale jesteś jedynym gatunkiem, który mi się tak przysłużył :P
P-38057
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-03 16:10:23
Było źle, jest jeszcze gorzej :/ Jak przedtem dało się zaznaczyć pierwszą pozycję (co widać na zrzucie), tak teraz jest to niemożliwe.
Może ktoś z was pisał kiedyś coś takiego i mógłby zapodać kod? Ja bym sobie to na spokojnie przeanalizował...
P-38071
malan
» 2011-08-03 17:44:48
Przerobiony kod kursu:
C/C++
#include <Windows.h>
#include <Commctrl.h>

LRESULT CALLBACK windowProcedure( HWND windowHandle, UINT event, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE instanceHandle, HINSTANCE unused, char * commandLine, int showMode )
{
    HBITMAP icon;
    HIMAGELIST imageList;
    HWND listViewHandle, windowHandle;
    INITCOMMONCONTROLSEX initCommonControls;
    LV_COLUMN column;
    LVITEM item;
    MSG event;
    WNDCLASSEX windowClass;
   
    windowClass.cbSize = sizeof( WNDCLASSEX );
    windowClass.style = 0;
    windowClass.lpfnWndProc = windowProcedure;
    windowClass.cbClsExtra = 0;
    windowClass.cbWndExtra = 0;
    windowClass.hInstance = instanceHandle;
    windowClass.hIcon = LoadIcon( 0, IDI_APPLICATION );
    windowClass.hCursor = LoadCursor( 0, IDC_ARROW );
    windowClass.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    windowClass.lpszMenuName = 0;
    windowClass.lpszClassName = L"ClassName";
    windowClass.hIconSm = LoadIcon( 0, IDI_APPLICATION );
   
    if( !RegisterClassEx( & windowClass ) )
    {
        MessageBox( NULL, L"Wysoka Komisja odmawia rejestracji tego okna!", L"Niestety...",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }
   
    initCommonControls.dwSize = sizeof( INITCOMMONCONTROLSEX );
    initCommonControls.dwICC = ICC_LISTVIEW_CLASSES;
   
    if( !InitCommonControlsEx( & initCommonControls ) )
    {
        MessageBox( 0, L"Bez komentarza...", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    windowHandle = CreateWindowEx( WS_EX_CLIENTEDGE, L"ClassName", L"[cpp0x.pl] T-4846", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, 0, 0, instanceHandle, 0 );
    if( !windowHandle )
    {
        MessageBox( 0, L"Okno odmówiło przyjścia na świat!", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    icon =( HBITMAP ) LoadImage( 0, L"modification.bmp", IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE );
    if( !icon )
    {
        MessageBox( 0, L"A ikona to gdzie?!", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    imageList = ImageList_Create( 16, 16, ILC_COLOR24, 1, 0 );
    if( !imageList )
    {
        MessageBox( 0, L"Obrazków nie będzie!", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    if( ImageList_Add( imageList, icon, 0 ) < 0 )
    {
        MessageBox( 0, L"Ikona nie spełnia wymagań! Nie dodam jej! Buhahaha!", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    listViewHandle = CreateWindowEx( WS_EX_CLIENTEDGE, WC_LISTVIEW, L"LV", LVS_REPORT | WS_CHILD | WS_VISIBLE, 0, 0, 320, 240, windowHandle, 0, instanceHandle, 0 );
    if( !listViewHandle )
    {
        MessageBox( 0, L"Lista odmówiła przyjścia na świat!", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    if( ListView_SetImageList( listViewHandle, imageList, LVSIL_SMALL ) < 0 )
    {
        MessageBox( 0, L"Tak blisko, a tak daleko...", L"Ale kicha...", MB_ICONEXCLAMATION );
        return 1;
    }
   
    column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
    column.fmt = 0;
    column.cx = 150;
    column.pszText = L"Kolumna1";
    column.cchTextMax = strlen( "Kolumna1" );
    column.iSubItem = 0;
    column.iImage = 0;
    column.iOrder = 0;
    column.cxMin = 100;
    column.cxIdeal = 150;
   
    if( ListView_InsertColumn( listViewHandle, 0, & column ) < 0 )
         return 2;
   
    item.mask = LVIF_IMAGE | LVIF_TEXT;
    item.iItem = 0;
    item.iSubItem = 0;
    item.state = 0;
    item.stateMask = 0;
    item.pszText = L"Wiersz1";
    item.cchTextMax = strlen( "Wiersz1" );
    item.iImage = 0;
    item.lParam = 0;
    item.iIndent = 0;
    item.iGroupId = I_GROUPIDNONE;
    item.cColumns = 0;
    item.puColumns = 0;
    item.piColFmt = 0;
    item.iGroup = 0;
   
    if( ListView_InsertItem( listViewHandle, & item ) < 0 )
         return 3;
   
    ShowWindow( windowHandle, showMode );
    UpdateWindow( windowHandle );
   
    while( GetMessage( & event, 0, 0, 0 ) )
    {
        TranslateMessage( & event );
        DispatchMessage( & event );
    }
   
    ImageList_Destroy( imageList );
    DeleteObject( icon );
   
    return event.wParam;
}

LRESULT CALLBACK windowProcedure( HWND windowHandle, UINT event, WPARAM wParam, LPARAM lParam )
{
    switch( event )
    {
    case WM_CLOSE:
        DestroyWindow( windowHandle );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
       
        default:
        return DefWindowProc( windowHandle, event, wParam, lParam );
    }
   
    return 0;
}


Tylko nikomu nie mów, że to ja pisałem!
P-38087
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-04 11:17:50
rozumiem, że kwadracik, to ta ikona?
Ale po co w MessageBox( 0, L"Tak blisko, a tak daleko...", L"Ale kicha...", MB_ICONEXCLAMATION ); te litery "L"??
P-38121
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-04 13:17:54
Pousuwałem te litery "L" i oto rezultat:

In function `int WinMain(HINSTANCE__*, HINSTANCE__*, char*, int)':
11 `INITCOMMONCONTROLSEX' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
11 expected `;' before "initCommonControls"
37 `initCommonControls' undeclared (first use this function)
40 `InitCommonControlsEx' undeclared (first use this function)
92 'struct LVCOLUMNA' has no member named 'iImage'
93 'struct LVCOLUMNA' has no member named 'iOrder'
94 'struct LVCOLUMNA' has no member named 'cxMin'
95 'struct LVCOLUMNA' has no member named 'cxIdeal'
109 'struct LVITEMA' has no member named 'iIndent'
110 'struct LVITEMA' has no member named 'iGroupId'
110 `I_GROUPIDNONE' undeclared (first use this function)
111 'struct LVITEMA' has no member named 'cColumns'
112 'struct LVITEMA' has no member named 'puColumns'
113 'struct LVITEMA' has no member named 'piColFmt'
114 'struct LVITEMA' has no member named 'iGroup'
[Build Error]  [main.o] Error 1

No i co ja mam teraz zrobić, oprócz ucieczki w panice? :D Znowu trzeba coś dolinkować?
P-38129
malan
» 2011-08-04 13:23:32
A coś jeszcze usuwałeś/edytowałeś/przestawiałeś/zamieniałeś kolejnością?
Jaki masz system? Wersja IE?
P-38130
xevuel
Temat założony przez niniejszego użytkownika
» 2011-08-04 13:37:54
XP professional
Nic oprócz tego nie zmieniałem
aha, przeczytałem odcinek o toolbarze i tam pisało że trzeba dopisać #define _WIN32_IE 0x600 czy jakoś tak, ale też pokazywało te same błędy.
Jak chodzi o Internet Explorera, to mam 8.
P-38131
malan
» 2011-08-04 14:28:13
Dopisałeś to przed
#include <Windows.h>
?
P-38133
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona