Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вставить изображение  (Прочитано 16891 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Junk
Гость
« : 19-01-2005 10:22 » 

Привет,

мне нужно в определенное место в окне вставить небольшую картинку и, в процессе работы программы менять ее на другую и обратно.
Может кто-нибудь подсказать как все это делается для Win32 API. Какой должен быть формат и расширение изображения и как все описывать в программе?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-01-2005 11:07 » 

Картинки в формате bitmap

загружаешь обе картинки LoadBitmap
прорисовываешь одну из картинок вызовом BitBlt в обработчике WM_PAINT.  Для того, чтобы обработчик правильно выбрал картинку для отрисовки, задай флаг
В нужные моменты времени меняй флаг и вызывай UpdateWindow

Вот так это может выглядеть средствами голого API
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Junk
Гость
« Ответ #2 : 19-01-2005 14:11 » 

И как работать со списком Control List?
Там ведь можно в одной строке и текст отображать и картинку.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 19-01-2005 16:15 » 

Если ты спрашиваешь про ListBox, то смотри пример на MSDN

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listboxes/usinglistboxes.asp
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Junk
Гость
« Ответ #4 : 19-01-2005 22:17 » 

Не, я имею в виду как раз не List Box, а Control List - там текст сразу с картинкой
Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #5 : 20-01-2005 03:27 » 

Не, я имею в виду как раз не List Box, а Control List - там текст сразу с картинкой
Можешь сделать OwnerDraw переопределить DrawItem и MeasureItem а дальше как тебе npak написал А вообще у него есть еще ImageList

CImageList m_Image;//Список изображений
m_List.Create(LVS_ICON | LVS_REPORT | WS_CHILD |LBS_NOTIFY |
                         WS_VISIBLE, CRect(40,55,400,190), this, 1000);//создаем таблицу
      m_Image.Create(16, 16, TRUE, 1, 1);                     //создаем список изображений   
       m_Image.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));
        m_List.SetImageList(&m_Image, LVSIL_SMALL);

Потом заполняешь типа:
     LV_ITEM item;//элемент списка
       item.iItem = 0;//нулевой элемент
        item.iImage = 0;//нулевая картинка
        ну а дальше как обычно...
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Junk
Гость
« Ответ #6 : 20-01-2005 05:54 » 

To USBLexus:   Блин, да не на MFC
Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #7 : 20-01-2005 06:09 » 

To USBLexus: Блин, да не на MFC

А какая разница? HIMAGELIST ListView_SetImageList(

    HWND hwnd,    
    HIMAGELIST himl,    
    int iImageList   
   );
Еще по моему никто не отменял... Ну а если мы вообще не ищем легких путей тогда посылай сообщение

The LVM_SETIMAGELIST message assigns an image list to a list view control. You can send this message explicitly or by using the ListView_SetImageList macro.

LVM_SETIMAGELIST 
wParam = (WPARAM) (int) iImageList;
lParam = (LPARAM) (HIMAGELIST) himl;
 

Parameters

himl

Handle to the image list to assign.

iImageList

Type of image list. This parameter can be one of the following values:

Value   Meaning
LVSIL_NORMAL   Image list with large icons
LVSIL_SMALL   Image list with small icons
LVSIL_STATE   Image list with state images
 

Return Values

Returns the handle of the image list previously associated with the control if successful; NULL otherwise.

See Also

ListView_SetImageList

Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
makon
Гость
« Ответ #8 : 21-01-2005 21:47 » 

ms-help://MS.MSDNQTR.2004APR.1033/shellcc/platform/commctls/listview/listview_using.htm  Круто!

// InitListViewImageLists - creates image lists for a
// list-view control.
// This function only creates image lists. It does not
// insert the items into the control, which is necessary
// for the control to be visible.   
// Returns TRUE if successful, or FALSE otherwise.

// hWndListView - handle to the list-view control.

BOOL InitListViewImageLists(HWND hWndListView)
{
    HICON hiconItem;     // icon for list-view items
    HIMAGELIST hLarge;   // image list for icon view
    HIMAGELIST hSmall;   // image list for other views

// Create the full-sized icon image lists.
    hLarge = ImageList_Create(GetSystemMetrics(SM_CXICON),
    GetSystemMetrics(SM_CYICON), ILC_MASK, 1, 1);
    hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
    GetSystemMetrics(SM_CYSMICON), ILC_MASK, 1, 1);
   
// Add an icon to each image list. 
    hiconItem = LoadIcon(g_hinst,
      MAKEINTRESOURCE(IDI_ITEM));
    ImageList_AddIcon(hLarge, hiconItem);
    ImageList_AddIcon(hSmall, hiconItem);
    DestroyIcon(hiconItem);
 
/******************************************************
Usually you have multiple icons; therefore, the previous
four lines of code can be inside a loop. The following
code shows such a loop. The icons are defined in the
application's header file as resources, which are
numbered consecutively starting with IDS_FIRSTICON. The
number of icons is defined in the header file as
C_ICONS.

for(index = 0; index < C_ICONS; index++)
    {
    hIconItem = LoadIcon (hInst, MAKEINTRESOURCE
      (IDS_FIRSTICON + index));
    ImageList_AddIcon(hSmall, hIconItem);
    ImageList_AddIcon(hLarge, hIconItem);
    Destroy(hIconItem);
    }
   *******************************************************/
// Assign the image lists to the list-view control.
    ListView_SetImageList(hwndLV, hLarge, LVSIL_NORMAL);
    ListView_SetImageList(hwndLV, hSmall, LVSIL_SMALL);
    return TRUE;
}


дальше думаю понятно
« Последнее редактирование: 20-12-2007 20:26 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines