List View Item Control.

Thursday, August 26, 2010

Here is a sample listing of code that will add bitmap IDs(win32 application) or ICON Ids to the list view control. few month back I made this to add a feature to my existing application module.
You cannot blindly add this to ur workspace since it need some modifications. Treat this as a code snippet or an example to make the target.!! Happy coding
/**

     class/structure:     SListControl

author: renjith

creation: 25-march-2008

Modification History
---------------------------------------------------------------------------------
Date comments Reason

---------------------------------------------------------------------------------
27-Mar-08 Added ne method AddBmpImage() which To add this class in
takes a vector of Ids and Names as Input. main dialog of CADPartDB


16-Jun-08 Added new methods SetProductName() and Support for new fron-end
GetProductName() to support the new front interface (insert/update
end Interface the contents of DB)


---------------------------------------------------------------------------------
**/


#pragma once

#include
#include "../resource.h"
#include "../stdafx.h"


struct SListControl
{


private:
LV_ITEM lvi;
LV_COLUMN lvc;

std::vector<_str> m_strProdName;


public:

//int AddString ( LPCTSTR str ) { return ::SendMessage( handle, LB_ADDSTRING, 0, (LPARAM)str ); };

int GetCurSel();
void SetProductName(const std::vector<_str> & strVecName);

std::vector<_str> GetProductName();

void AddBmpImage(std::vector<int> nVecIDs,std::vector<_str> strVecName);
bool AddBmpImage(int nIDStart,int nIDEnd, _str strName);

bool AddIconImage(int nIDStart,int nIDEnd, _str strName);
};








/**
class/structure: SListControl
author: renjith

creation: 25-march-2008

Modification History
---------------------------------------------------------------------------------
Date comments Reason

---------------------------------------------------------------------------------
27-Mar-08 Added ne method AddBmpImage() which To add this class in
takes a vector of Ids and Names as Input. main dialog of CADPartDB


16-Jun-08 Added new methods SetProductName() and Support for new fron-end
GetProductName() to support the new front interface (insert/update
end Interface the contents of DB)


---------------------------------------------------------------------------------
**/




#include "guicontrolenhanced.h"
#include "StdAfx.h"

#include

#include "../resource.h"
/*

#include

#include

using namespace std;*/




void SListControl::SetProductName(const std::vector<_str> & strVecName)

{
m_strProdName = strVecName;
}

std::vector<_str> SListControl::GetProductName()
{
return m_strProdName;

}

void SListControl::AddBmpImage(std::vector<int> nVecIDs,std::vector<_str> strVecName)
{
int nMAX = nVecIDs.size();

HWND hList = handle;
RECT Rect;
HIMAGELIST himlLarge;

SetProductName(strVecName);

//LV_ITEM lvi;
//LV_COLUMN lvc;

int iStatus;
int i;
char szStr[ 32 ];

//Registers and initializes certain common control window classes.

InitCommonControls();

if( ! hList )
MessageBox(NULL,
"hList is Null","",MB_OK);


// Create an Image list, of 80x80 pixels
himlLarge = ImageList_Create(80,80,ILC_COLOR32,100,100);
//4th argument is the number of images that the image list initially contains.
//5th argument is the the number of images by which the image list can grow when
//the system needs to make room for new images.


for( i = 0; i < color="#008000">// Add Images to each image list
{
HBITMAP hBitMap;
// bitmap handler

int imlindex=-1;

hBitMap=LoadBitmap(g_hModule,MAKEINTRESOURCE(nVecIDs[i]));
if(!hBitMap)
MessageBox(NULL,
"hBitMap is null","Msg",MB_OK);


imlindex = ImageList_Add(himlLarge,hBitMap,NULL);
}

// Make the listview use the images lists and exit

//ListView_SetImageList( hList, himlLarge, LVSIL_NORMAL);

// this is # defined in the header as...
SendMessage(hList, LVM_SETIMAGELIST, (WPARAM)(LVSIL_NORMAL), (LPARAM)(HIMAGELIST)(himlLarge));

GetClientRect( hList, &Rect );
// Get the listview RECT size

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

lvc.fmt = LVCFMT_LEFT;
lvc.cx = Rect.right - Rect.left;
// Make bar width of window
lvc.pszText =
"Item Status";
lvc.iSubItem = 0;
// Add display column (for Report View)

//iStatus = ListView_InsertColumn( hList, 0, &lvc );
iStatus = SendMessage((hList), LVM_INSERTCOLUMN, (WPARAM)(
int)(0), (LPARAM)(const LV_COLUMN *)(&lvc));


lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
lvi.state = 0;
lvi.stateMask = LVIS_FOCUSED;
// Set generic structure values
lvi.pszText = szStr;

for( i = 0; i < color="#008000">// Add 20 items to the control

{

wsprintf( szStr,
"%s",strVecName[i].c_str() ); // Name depends on number
lvi.iImage = i ;
// 5 images

lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = 1;
//iStatus = ListView_InsertItem( hList, &lvi ); // Add item to control

iStatus = ::SendMessage((hList), LVM_INSERTITEM, 0, (LPARAM)(
const LV_ITEM *)( &lvi));
}
}

bool SListControl::AddBmpImage(int nIDStart,int nIDEnd, _str strName)

{
int nMAX = nIDEnd - nIDStart;
HWND hList = handle;
RECT Rect;
HIMAGELIST himlLarge;
// HIMAGELIST himlSmall;


//LV_ITEM lvi;
//LV_COLUMN lvc;
int iStatus;
int i;

char szStr[ 32 ];


InitCommonControls();

if( ! hList )
MessageBox(NULL,
"hList is Null","",MB_OK);

// Create two lists, one for 32x32 and another for 16x16 icons

himlLarge = ImageList_Create(80,80,ILC_COLOR32,100,100);
//100, 100, ILC_COLOR32, 0, 10

for( i = 0; i <= nMAX; i++ ) // Add icons to each image list

{
HBITMAP hBitMap;
// bitmap handler
int imlindex=-1;


hBitMap=LoadBitmap(g_hModule,MAKEINTRESOURCE(nIDStart+i));
if(!hBitMap)
MessageBox(NULL,
"hBitMap is null","Msg",MB_OK);


imlindex = ImageList_Add(himlLarge,hBitMap,NULL);
}

// Make the listview use the images lists and exit

//ListView_SetImageList( hList, himlLarge, LVSIL_NORMAL);

SendMessage(hList, LVM_SETIMAGELIST, (WPARAM)(LVSIL_NORMAL), (LPARAM)(HIMAGELIST)(himlLarge));

GetClientRect( hList, &Rect );
// Get the listview RECT size

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

lvc.cx = Rect.right - Rect.left;
// Make bar width of window
lvc.pszText =
"Item Status";
lvc.iSubItem = 0;
// Add display column (for Report View)
//iStatus = ListView_InsertColumn( hList, 0, &lvc );

iStatus = SendMessage((hList), LVM_INSERTCOLUMN, (WPARAM)(
int)(0), (LPARAM)(const LV_COLUMN *)(&lvc));

lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
lvi.state = 0;

lvi.stateMask = LVIS_FOCUSED;
// Set generic structure values
lvi.pszText = szStr;

for( i = 0; i <= nMAX; i++ ) // Add 20 items to the control
{


wsprintf( szStr,
"%s #%d",strName.c_str(), i + 1 ); // Name depends on number
lvi.iImage = i ;
// 5 images

lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = 1;
//iStatus = ListView_InsertItem( hList, &lvi ); // Add item to control

iStatus = ::SendMessage((hList), LVM_INSERTITEM, 0, (LPARAM)(
const LV_ITEM *)( &lvi));
}
// SendMessage(hList,LVM_DELETEITEM,3,0);

return true;

}

bool SListControl::AddIconImage(int nIDStart,int nIDEnd, _str strName)
{
int nMAX = nIDEnd - nIDStart;

HWND hList = handle;
RECT Rect;
HICON hiconItem;
HIMAGELIST himlLarge;
//LV_ITEM lvi;
//LV_COLUMN lvc;

int iStatus;
char szStr[ 32 ];
int i;

InitCommonControls();


if( ! hList )
MessageBox(NULL,
"hList is Null","",MB_OK);
// Create lists, for 32x32 icons

himlLarge = ImageList_Create( GetSystemMetrics( SM_CXICON ),
GetSystemMetrics( SM_CYICON ),
TRUE, 1, 1 );


for( i = 0; i < color="#008000">// Add icons to each image list
{


hiconItem = (HICON)LoadImage( g_hModule, MAKEINTRESOURCE( 1000+i ),IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR );
if(!hiconItem)
MessageBox(NULL,
"hiconItem is Null","",MB_OK);


ImageList_AddIcon( himlLarge, hiconItem );
DeleteObject( hiconItem );
}


// Make the listview use the images lists and exit
//ListView_SetImageList( hList, himlLarge, LVSIL_NORMAL);
SendMessage(hList, LVM_SETIMAGELIST, (WPARAM)(LVSIL_NORMAL), (LPARAM)(HIMAGELIST)(himlLarge));

GetClientRect( hList, &Rect );
// Get the listview RECT size


lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = Rect.right - Rect.left;
// Make bar width of window
lvc.pszText =
"Item Status";

lvc.iSubItem = 0;
// Add display column (for Report View)
//iStatus = ListView_InsertColumn( hList, 0, &lvc );
iStatus = SendMessage((hList), LVM_INSERTCOLUMN, (WPARAM)(
int)(0), (LPARAM)(const LV_COLUMN *)(&lvc));



lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
lvi.state = 0;
lvi.stateMask = LVIS_FOCUSED;
// Set generic structure values
lvi.pszText = szStr;

for( i = 0; i < color="#008000">// Add 20 items to the control

{
wsprintf( szStr,
"%s #%d",strName.c_str(), i + 1 ); // Name depends on number
lvi.iImage = i ;
//% 5; // 5 images

lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = 1;
//iStatus = ListView_InsertItem( hList, &lvi ); // Add item to control

iStatus = ::SendMessage((hList), LVM_INSERTITEM, 0, (LPARAM)(
const LV_ITEM *)( &lvi));
}


return true;

}

int SListControl::GetCurSel()
{
//return ListView_GetNextItem(handle,-1,LVNI_FOCUSED);;
return SendMessage(handle,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); // return item selected

}


cppcoder.blogspot.com/

0 comments:

Post a Comment