Змінюй хід війни! Допомагай ЗСУ!

ListView

🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
Статус: Offline
Реєстрація: 28.01.2009
Повідом.: 176
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #1
Начал разбиратся как выводить информацию на экран (программа - адресная книга). Возникла такая проблема: ничего не видно на экране. Ошибок не выдает, с МСДН-а вставил функцию, которая должна создать список. Но на экране ничего не видно.

Перечитал кучу инфы - там надо добавить Item вроде-бы - но я не могу найти как. Подскажите, киньте ссылку на инфу.

HWND CreateListView (HWND hWnd)

{
RECT rcl;
INITCOMMONCONTROLSEX icex;

// Ensure that the common control DLL is loaded.
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);

// Create the list-view window in report view with label editing enabled.
GetClientRect (hWnd, &rcl);

ListE = CreateWindow(
WC_LISTVIEW,
_T("SS"),
WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
0,
0,
rcl.right - rcl.left,
rcl.bottom - rcl.top,
hWnd,
(HMENU)77,
hInst,
NULL);

return ListE;
};



case WM_CREATE:
InitCommonControls();

LoadLibrary( _T("COMCTL32.DLL"));
LoadLibrary( _T("RICHED32.DLL"));

SSS=CreateListView(hWnd);
break;

Упс, нашол новую инфу - читаю...
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #2
а нах ты лоад либрари юаешь? ет кажись динамически.
можно подключить статическую либу. в студии #pragma comment (lib,"name")
еще нужен стиль WS_VISIBLE.
щас свой класс кину.

class ListView:public clscontr,public window
{
//POINT start;
//UINT width;
//HWND MyHw;
//UINT length;
HIMAGELIST hil;
HIMAGELIST hil_big;
viever2*back;
WNDPROC wpc;
int ID;
UINT all;
public:
ListView()
{
}
ListView(HWND hWnd,viever2*vw,POINT t_start,int len,int width,int _ID)
{
//WNDCLASSEX wcex;
//wcex.cbSize=sizeof(wcex);
//wcex.lpszClassName="asdd";
//wcex.hInstance=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
//wcex.lpfnWndProc=ListView::WndProc;
//wcex.hIcon=LoadIcon((HINSTANCE)NULL,IDI_APPLICATION);
//wcex.hbrBackground=(HBRUSH)(CreateSolidBrush((COLORREF)GetSysColor(0)));
//wcex.hCursor=LoadCursor(0,IDI_APPLICATION);
//wcex.cbClsExtra=0;
//wcex.cbWndExtra=0;
//wcex.hIconSm=LoadIcon(0,IDI_APPLICATION);
//wcex.style=NULL;
//wcex.lpszMenuName=NULL;
//int res = RegisterClassEx(&wcex);
//if(res==0)
//{
// MessageBox(0,"RegisterClassEx falied","",MB_OK);
// char* temp = new char[100];
// wsprintf(temp,"%li",GetLastError());
// MessageBox(NULL,temp,"Error",MB_OK);
// delete[] temp;
//}

this->MyHw=CreateWindow(WC_LISTVIEW,"",LVS_REPORT|WS_VISIBLE|WS_BORDER|WS_CHILD|LVS_SHOWSELALWAYS,
t_start.x,t_start.y+40,width,len,hWnd,(HMENU)(ID+100),(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),NULL);
if(!this->MyHw)
MessageBox(0,"no window",0,MB_OK);
// this->wpc=(WNDPROC)SetWindowLong(this->MyHw,GWL_WNDPROC,(LONG)ListView::WndProc);
SetWindowLong(this->MyHw,GWL_USERDATA,(LONG)this);
this->hil=ImageList_Create(16,16,ILC_COLOR32,100,1000);
this->hil_big=ImageList_Create(32,32,ILC_COLOR32,100,1000);
SendMessage(this->MyHw,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)hil);
this->back=vw;
this->ID=_ID;
}
/* static LRESULT WINAPI WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
_this->Proc(hWnd,msg,wParam,lParam);
return CallWindowProc(_this->wpc,hWnd,msg,wParam,lParam);
}*/
void addstring(char*str,HICON hi)
{
LVITEM lvi;
int a=SendMessage(this->MyHw,LVM_GETITEMCOUNT,NULL,NULL);
ZeroMemory(&lvi,sizeof(lvi));
lvi.mask=LVIF_TEXT;
lvi.pszText=str;
lvi.iItem=a;
lvi.iSubItem=0;
int z=SendMessage(this->MyHw,LVM_INSERTITEM,a,(LPARAM)&lvi);
ImageList_AddIcon(this->hil,hi);
ImageList_AddIcon(this->hil_big,hi);
}
char*GetSel(int nth=1)
{
UINT cursel=SendMessage(this->MyHw,LVM_GETSELECTEDCOUNT,NULL,NULL);
//int pos=SendMessage(this->MyHw,LVM_GETNEXTITEM,nth,(WPARAM)LVNI_SELECTED);
// char str;
LVITEM lvi;
int a=-1;
int i;
ZeroMemory(&lvi,sizeof(lvi));
for(i=0;i<nth;i++)
{
lvi.pszText=new char[100];
lvi.mask=LVIF_TEXT;
lvi.iItem=NULL;
lvi.cchTextMax=100;
a=SendMessage(this->MyHw,LVM_GETNEXTITEM,a,LVNI_SELECTED);
lvi.iItem=a;
SendMessage(this->MyHw,LVM_GETITEM,NULL,(LPARAM)&lvi);

if(i<(nth-1)&&i>1)
delete[]lvi.pszText;
}
return (char*)lvi.pszText;
}
int GetSeli(int n=-1)
{
LVITEM lvi;
ZeroMemory(&lvi,sizeof(lvi));
int a=SendMessage(this->MyHw,LVM_GETNEXTITEM,n,LVNI_FOCUSED);
return a;
}
char*GetString(int nth)
{
LVITEM lvi;
ZeroMemory(&lvi,sizeof(lvi));
lvi.pszText=new char[100];
lvi.mask=LVIF_TEXT;
lvi.iItem=nth;
lvi.cchTextMax=100;
SendMessage(this->MyHw,LVM_GETITEM,NULL,(LPARAM)&lvi);
return lvi.pszText;
}
LVITEM GetItem(int nth)
{
LVITEM lvi;
ZeroMemory(&lvi,sizeof(lvi));
lvi.pszText=new char[100];
lvi.mask=LVIF_TEXT|LVIF_IMAGE;
lvi.iItem=nth;
lvi.cchTextMax=100;
SendMessage(this->MyHw,LVM_GETITEM,NULL,(LPARAM)&lvi);
return lvi;
}
void Clear()
{
SendMessage(this->MyHw,LVM_DELETEALLITEMS,NULL,NULL);
if(this->hil)
ImageList_RemoveAll(this->hil);
if(this->hil_big)
ImageList_RemoveAll(this->hil_big);
}
HWND GetHandle()
{
return this->MyHw;
}
void proc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
NMHDR* n=(LPNMHDR)lParam;
//int a=n.code;
switch(n->code)
{
case LVN_ITEMACTIVATE:
{
int sl=SendMessage(n->hwndFrom,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
this->back->GoToNewDir(this->GetString(sl));
//MessageBox(0,"new dir","",MB_OK);
break;
}
case LVN_ITEMCHANGED:
{
SendMessage(hWnd,_WM_SELFCLICK,(WPARAM)(this->ID),NULL);
UINT a=SendMessage(this->MyHw,LVM_GETSELECTEDCOUNT,NULL,NULL);
LPNMLISTVIEW p=(LPNMLISTVIEW)lParam;
this->back->SetCurSel(a,p->iItem);
UINT b=SendMessage(this->MyHw,LVM_GETITEMCOUNT,NULL,NULL);
this->all=b;
break;
}
case LVN_COLUMNCLICK:
{
NMLISTVIEW nml=*(LPNMLISTVIEW)lParam;
this->back->Sort(nml.iSubItem);
SendMessage(hWnd,_WM_SELFCLICK,(WPARAM)(this->ID),NULL);
//SendMessage(hWnd,MY_WM_NEEDSORT,(WPARAM)(nml.iSubItem),NULL);
}
break;
}
}
void AddCollum(char*colname)
{

LVCOLUMN lvc;
ZeroMemory(&lvc,sizeof(lvc));
lvc.cx=70;
lvc.mask=LVCF_TEXT|LVCF_WIDTH;
lvc.pszText=colname;
SendMessage(this->MyHw,LVM_INSERTCOLUMN,NULL,(LPARAM)&lvc);
}
void SpcAdd(char*filename,char*filetype,char*size,char*changed,char*created,char*lastwrite,HICON hi,char*pathto=NULL)
{
LVITEM lvi;
int a=SendMessage(this->MyHw,LVM_GETITEMCOUNT,NULL,NULL);
ZeroMemory(&lvi,sizeof(lvi));
lvi.mask=LVIF_TEXT|LVIF_IMAGE;
lvi.pszText=filename;
lvi.iItem=a;
lvi.iSubItem=0;

lvi.iImage=ImageList_AddIcon(this->hil,hi);
ImageList_AddIcon(this->hil_big,hi);
int i=SendMessage(this->MyHw,LVM_INSERTITEM,a,(LPARAM)&lvi);

lvi.iSubItem=1;
lvi.iItem=i;
lvi.pszText=filetype;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);

lvi.iSubItem=2;
lvi.iItem=i;
lvi.pszText=size;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);

lvi.iSubItem=3;
lvi.iItem=i;
lvi.pszText=changed;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);

lvi.iSubItem=4;
lvi.iItem=i;
lvi.pszText=created;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);

lvi.iSubItem=5;
lvi.iItem=i;
lvi.pszText=lastwrite;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);

if(pathto)//search
{
lvi.iSubItem=6;
lvi.iItem=i;
lvi.pszText=pathto;
SendMessage(this->MyHw,LVM_SETITEM,NULL,(LPARAM)&lvi);
}
}
char* GetSubItem(int col=0,int row=0)
{
LVITEM lvi;
ZeroMemory(&lvi,sizeof(lvi));
lvi.pszText=new char[100];
lvi.mask=LVIF_TEXT;
lvi.cchTextMax=100;
lvi.iItem=row;
lvi.iSubItem=col;
SendMessage(this->MyHw,LVM_GETITEM,NULL,(LPARAM)&lvi);
return lvi.pszText;
}
int GetSelNum(int nth=0)
{
UINT cursel=SendMessage(this->MyHw,LVM_GETSELECTEDCOUNT,NULL,NULL);
if(!cursel) return 0;
//int pos=SendMessage(this->MyHw,LVM_GETNEXTITEM,nth,(WPARAM)LVNI_SELECTED);
//char str;
LVITEM lvi;
int a=-1;
int i;
ZeroMemory(&lvi,sizeof(lvi));
for(i=0;i<nth;i++)
{
lvi.pszText=new char[100];
lvi.mask=LVIF_TEXT;
lvi.iItem=NULL;
lvi.cchTextMax=100;
a=SendMessage(this->MyHw,LVM_GETNEXTITEM,a,LVNI_SELECTED);
lvi.iItem=a;
SendMessage(this->MyHw,LVM_GETITEM,NULL,(LPARAM)&lvi);

if(i<(nth-1)&&i>1)
delete[]lvi.pszText;
}
return a;
}
UINT getcurs()
{
UINT cursel=SendMessage(this->MyHw,LVM_GETSELECTEDCOUNT,NULL,NULL);
return cursel;
}
HIMAGELIST GetHil(bool big=false)
{
if(big)
return this->hil_big;
else
return this->hil;
}


void SetIsSel(int what,bool sel)
{
UINT st=0;
if(sel)
st=LVIS_SELECTED;
ListView_SetItemState(this->MyHw,what,st,LVIS_SELECTED);
//SendMessage(this->MyHw,LVM_SETITEM,
}
bool GetIsSel(UINT16 what)
{
return ListView_GetItemState(this->MyHw,what,TVIS_SELECTED);
}
void InvertSel()
{
for(int i=1;i<this->all+1;i++)
this->SetIsSel(i,!this->GetIsSel(i));
}
void SelHasString(char*str)
{
for(int i=1;i<(this->all+1);i++)
{
char*s=this->GetString(i);
if(strstr(s,str)||strstr(str,s))
SetIsSel(i,true);
delete[]s;
}
}
void SelAll()
{
for(int i=1;i<(this->all+1);i++)
this->SetIsSel(i,true);
}
};
вот, тут далеко не все нужно тебе, но посмотри
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #3
Нашол такую штуку в МСДН:

Все отлично, только заголовка для столбцов не видно:

BOOL InitListViewColumns(HWND hWndListView)
{
WCHAR szText[256]=_T("DDD"); // temporary buffer
LVCOLUMN lvc;
int iCol;

// Initialize the LVCOLUMN structure.
// The mask specifies that the format, width, text, and subitem members
// of the structure are valid.

lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

// Add the columns.
for (iCol = 0; iCol < NumberOfColumns; iCol++)
{
lvc.iSubItem = iCol;
lvc.pszText = szText;
lvc.cx = 150; // width of column in pixels

if ( iCol < 2 )
lvc.fmt = LVCFMT_LEFT; // left-aligned column
else
lvc.fmt = LVCFMT_RIGHT; // right-aligned column

// Load the names of the column headings from the string resources.
LoadString(hInst,
FirstColumn + iCol,
szText,
sizeof(szText)/sizeof(szText[0]));

// Insert the columns into the list view.
if (ListView_InsertColumn(hWndListView, iCol, &lvc) == -1)
return FALSE;
}
return TRUE;
}
 
Останнє редагування:
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #4
А на жуя ты их руками создаешь? У тя диалог басед апликейшен? Добовляешь в качестве ресурса свой главный диалог и делоф с рыбью ногу.
Ну а если препод настолько дебилен, что требует все только на АПИ, делаешь то же самое и смотришь с какими атрибутами стиля создаеться контрол там и используешь их себя!
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #5
Вожатая Люда на утренней линейке всегда била по морде пухлого пионера Колю,пока тот не научился поддтягиваться на подоконник,цепляясь за ручку окна.
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #6
епт, до чего же хорош .NET. Там заполнить листвью данными с базы занимает несколько красивых строчек кода :)
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #7
епт, до чего же хорош .NET. Там заполнить листвью данными с базы занимает несколько красивых строчек кода :)

А в делфи парой тройкой кликов мыши :) Но ни на Шарпе ни на ДЕлфи винду не напишешь и драйвера к ней тоже.
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #8
Бида.
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #9
Сократ подымался в гору со своими учениками,проходя мимо гентелыка,стоявшего у подножья.Там всегда было уютно,прохладно.Он всегда спрашивал у пионера Кавуна,хочет ли он подыматься в гору,или отдохнуть в гентелыке на мягком матрасе.Кавун отвечал,учитель,я отсюда буду наблюдать за вами,а когда спуститесь,я опишу все виденное и слышанное вами в нескольких красивых строчках.
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #10
Сократ подымался в гору со своими учениками,проходя мимо гентелыка,стоявшего у подножья.Там всегда было уютно,прохладно.Он всегда спрашивал у пионера Кавуна,хочет ли он подыматься в гору,или отдохнуть в гентелыке на мягком матрасе.Кавун отвечал,учитель,я отсюда буду наблюдать за вами,а когда спуститесь,я опишу все виденное и слышанное вами в нескольких красивых строчках.

Чтобы что-нибудь сделать нужна мотивация, в том числе и чтобы подняться в гору. А судя по рассказу Сократ от нефиг делать туда пошел :)
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #11
Совершенству знаний,стремлению углубить свои познания -мотивация не нужна никакая.Разве не задумывается пионер о работе того или иного оператора,пытаясь
обьяснить логику его работы,и тем самым рассматривая его действия на более низком уровне.
И почему тогда Кавун пошел в ученики к великому гению всех времен,почему он взял карандаш в руки,стряхивая со своей одежды строительный мусор ?
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #12
Совершенству знаний,стремлению углубить свои познания -мотивация не нужна никакая.

С этим я не согласен. Разве что может быть ты говоришь про любопытство/любознательность. Мотивация нужна везде, исключений нет. Мотивация - это наличие какого-нибудь результата, который ты хочешь получить. Если ты ничего не хочешь получить, ты ничего и не будешь делать. В случае со знаниями тоже самое. Должно быть что-то ради чего их нужно углублять. Если есть какая-то проблема, которую я не могу разрешить с теми знаниями, которые у меня имеются я буду их углублять в том направлении что нужно, если знаний хватает, то зачем тратить время напрасно?

Разве не задумывается пионер о работе того или иного оператора,пытаясь
обьяснить логику его работы,и тем самым рассматривая его действия на более низком уровне.

углубляться можно до бесконечности, зачем тогда собственно разрабатывались языки высокого уровня, ведь можно было бы пользоваться ассемблером

И почему тогда Кавун пошел в ученики к великому гению всех времен,почему он взял карандаш в руки,стряхивая со своей одежды строительный мусор ?

Великого гения всех времен не существует
 
  • 🔴 22:21 Повітряна тривога в м. Харків та Харківська територіальна громадаСлідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #13
Великого гения всех времен не существует

Это так кажется,если рассматривать бесконечность в одном направлении в будущее,и забывая о том что и прошлое бесконечно,и что и будущее и прошлое в одном всеобьемлющем пространстве бесконечности.
Пусть каждый пионер бросит в меня камень,если он думает,что произошел от обезьяны.
 
Назад
Зверху Знизу