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

ListView

🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 28.01.2009
Повідом.: 176
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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;

Упс, нашол новую инфу - читаю...
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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);
}
};
вот, тут далеко не все нужно тебе, но посмотри
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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;
}
 
Останнє редагування:
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
А на жуя ты их руками создаешь? У тя диалог басед апликейшен? Добовляешь в качестве ресурса свой главный диалог и делоф с рыбью ногу.
Ну а если препод настолько дебилен, что требует все только на АПИ, делаешь то же самое и смотришь с какими атрибутами стиля создаеться контрол там и используешь их себя!
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
Вожатая Люда на утренней линейке всегда била по морде пухлого пионера Колю,пока тот не научился поддтягиваться на подоконник,цепляясь за ручку окна.
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
епт, до чего же хорош .NET. Там заполнить листвью данными с базы занимает несколько красивых строчек кода :)
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
епт, до чего же хорош .NET. Там заполнить листвью данными с базы занимает несколько красивых строчек кода :)

А в делфи парой тройкой кликов мыши :) Но ни на Шарпе ни на ДЕлфи винду не напишешь и драйвера к ней тоже.
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
Бида.
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
Сократ подымался в гору со своими учениками,проходя мимо гентелыка,стоявшего у подножья.Там всегда было уютно,прохладно.Он всегда спрашивал у пионера Кавуна,хочет ли он подыматься в гору,или отдохнуть в гентелыке на мягком матрасе.Кавун отвечал,учитель,я отсюда буду наблюдать за вами,а когда спуститесь,я опишу все виденное и слышанное вами в нескольких красивых строчках.
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #10
Сократ подымался в гору со своими учениками,проходя мимо гентелыка,стоявшего у подножья.Там всегда было уютно,прохладно.Он всегда спрашивал у пионера Кавуна,хочет ли он подыматься в гору,или отдохнуть в гентелыке на мягком матрасе.Кавун отвечал,учитель,я отсюда буду наблюдать за вами,а когда спуститесь,я опишу все виденное и слышанное вами в нескольких красивых строчках.

Чтобы что-нибудь сделать нужна мотивация, в том числе и чтобы подняться в гору. А судя по рассказу Сократ от нефиг делать туда пошел :)
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
Совершенству знаний,стремлению углубить свои познания -мотивация не нужна никакая.Разве не задумывается пионер о работе того или иного оператора,пытаясь
обьяснить логику его работы,и тем самым рассматривая его действия на более низком уровне.
И почему тогда Кавун пошел в ученики к великому гению всех времен,почему он взял карандаш в руки,стряхивая со своей одежды строительный мусор ?
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
Совершенству знаний,стремлению углубить свои познания -мотивация не нужна никакая.

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

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

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

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

Великого гения всех времен не существует
 
  • 🟡 14:50 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
Великого гения всех времен не существует

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