Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить элемент в ListView, no comment 
V
    Опции темы
Dmitriy2k
Дата 29.9.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Пожалуйста помогите разобраться с ListView
Копал код примера из MSDN, сложновато мягко сказать.
Я решил тяпнуть кусок кода из примера MSDN и воспользоваться редактором ресурсов
что бы добавить listview

Вроде бы все нормально, в верхней первой строке listview напечатаны номера столбцов,
а вот элементы почему то не добавляются.

Исходники моего примера прилагаются


вот распечатка основного файла
Код


#include "stdafx.h"
#include "resource.h"
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")


#define ListView_InsertColumn(hwnd, iCol, pcol) \
    (int)SNDMSG((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN FAR*)(pcol))


HWND g_hWnd;


void ResizeListView(HWND hwndListView, HWND hwndParent)
{
RECT  rc;

GetClientRect(hwndParent, &rc);

MoveWindow( hwndListView, 
            rc.left,
            rc.top,
            rc.right - rc.left,
            rc.bottom - rc.top,
            TRUE);

//only call this if we want the LVS_NOSCROLL style
//PositionHeader(hwndListView);
}




BOOL InsertListViewItems(HWND hwndListView)
{
//empty the list
ListView_DeleteAllItems(hwndListView);

//set the number of items in the list
ListView_SetItemCount(hwndListView, 1000);

return TRUE;
}


LRESULT ListViewNotify(HWND hWnd, LPARAM lParam)
{
LPNMHDR  lpnmh = (LPNMHDR) lParam;
HWND     hwndListView = GetDlgItem(g_hWnd, IDC_LIST1);

switch(lpnmh->code)
   {
   case LVN_GETDISPINFO:
      {
      LV_DISPINFO *lpdi = (LV_DISPINFO *)lParam;
      TCHAR szString[MAX_PATH];

      if(lpdi->item.iSubItem)
         {
         if(lpdi->item.mask & LVIF_TEXT)
            {
            wsprintf(szString, "Item %d - Column %d", lpdi->item.iItem + 1, lpdi->item.iSubItem);
            lstrcpy(lpdi->item.pszText, szString);
            }
         }
      else
         {
         if(lpdi->item.mask & LVIF_TEXT)
            {
            wsprintf(szString, "Item %d", lpdi->item.iItem + 1);
            lstrcpy(lpdi->item.pszText, szString);
            }

         if(lpdi->item.mask & LVIF_IMAGE)
            {
            lpdi->item.iImage = 0;
            }
         }
      }
      return 0;

   case LVN_ODCACHEHINT:
      {
      LPNMLVCACHEHINT   lpCacheHint = (LPNMLVCACHEHINT)lParam;
      /*
      This sample doesn't use this notification, but this is sent when the 
      ListView is about to ask for a range of items. On this notification, 
      you should load the specified items into your local cache. It is still 
      possible to get an LVN_GETDISPINFO for an item that has not been cached, 
      therefore, your application must take into account the chance of this 
      occurring.
      */
      }
      return 0;

   case LVN_ODFINDITEM:
      {
      LPNMLVFINDITEM lpFindItem = (LPNMLVFINDITEM)lParam;
      /*
      This sample doesn't use this notification, but this is sent when the 
      ListView needs a particular item. Return -1 if the item is not found.
      */
      }
      return 0;
   }

return 0;
}





BOOL InitListView(HWND hwndListView)
{
LV_COLUMN   lvColumn;
int         i;
TCHAR       szString[5][20] = {"Main Column", "Column 1", "Column 2", "Column 3", "Column 4"};

//empty the list
ListView_DeleteAllItems(hwndListView);

//initialize the columns
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 120;
for(i = 0; i < 5; i++)
   {
   lvColumn.pszText = szString[i];
   ListView_InsertColumn(hwndListView, i, &lvColumn);
   }

InsertListViewItems(hwndListView);

return TRUE;
}



LRESULT CALLBACK WndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND hWndLW;
    static HWND g_hWnd;
    switch (message){
    case WM_INITDIALOG:        
        g_hWnd=hDlg;

        
        hWndLW=GetDlgItem(g_hWnd,IDC_LIST1);
        InitListView(hWndLW);
        
        return TRUE;


    case WM_NOTIFY:
        g_hWnd=hDlg;
        return ListViewNotify(g_hWnd, lParam);
        
    case WM_CLOSE: 
        EndDialog(hDlg,0);
        return TRUE;
    
    }
    return FALSE;

}



int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
   InitCommonControls();
    DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)WndProc);

   return 0;
}






Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  lw.zip 4,52 Kb
PM MAIL   Вверх
Mihhail
Дата 29.9.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 5
Всего: 9



Цитата(Dmitriy2k @  29.9.2007,  13:03 Найти цитируемый пост)
Вроде бы все нормально, в верхней первой строке listview напечатаны номера столбцов,а вот элементы почему то не добавляются

Я не нашёл ни одного места в твоей программе где должны добавляться элементы. Для этого необходимо заполнить структуру LV_ITEM и вызывать ListView_InsertItem - добавление строк, ListView_SetItemText - установка текста в определённый столбец выбранной строки.
Примерный код (вставляем в ф-цию BOOL InitListView(HWND hwndListView) после добавления столбцов):

Код

    TCHAR  szString[5][20] = {"Main Column", "Column 1", "Column 2", "Column 3", "Column 4"};
    int iItem, iSubItem;
    LV_ITEM lvi;

    memset( &lvi, 0, sizeof( LV_ITEM ) );
    lvi.mask = LVIF_TEXT;

    for( iItem = 0; iItem < 5 ;  iItem ++){
       lvi.iItem = iItem;
       ListView_InsertItem( hwndListView, &lvi );

       for( iSubItem = 0; iSubItem < 5 ;  iSubItem ++)
          ListView_SetItemText( hwndListView, iItem, iSubItem, szString[iSubItem] );
       }






Это сообщение отредактировал(а) Mihhail - 29.9.2007, 14:06
PM MAIL WWW   Вверх
Dmitriy2k
  Дата 30.9.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Спасибо, Все получилось! Я столько копался в этом коде...
PM MAIL   Вверх
Dmitriy2k
Дата 9.10.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Убрав лишний код я выкладываю исходник с работающим ListView с добавленными столбцами и элементами

Присоединённый файл ( Кол-во скачиваний: 92 )
Присоединённый файл  listview.zip 12,68 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.