codice:
#define STRICT
#include <windows.h>
#include <commctrl.h>
#include <sql.h>
#include <sqlext.h>
#include "resource.h"
#define WIN32_LEAN_AND_MEAN
#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
#define LVS_EX_FULLROWSELECT 32
LVCOLUMN LvCol;
LVITEM LvItem;
void dtGrid(HWND hwnd, int mItem, int *swi, int *idGrid, int redraw) {
SQLWCHAR *szData=new SQLWCHAR[256];
SQLINTEGER cbData;
extern SQLHSTMT stmtR;
RETCODE rc, rc1;
//InitCommonControls(); //in main a livello globale
HWND hGrid=GetDlgItem(hwnd,*idGrid);
ListView_SetBkColor(hGrid,RGB(228,228,228));
SendMessage(hGrid,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT);
memset(&LvCol,0,sizeof(LvCol));
LvCol.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM;
LvCol.cchTextMax=40;
LvCol.cx = 0x40;
if(redraw==0) {
extern SQLHDBC dbc; SQLHSTMT stmtHc;
SQLAllocHandle(SQL_HANDLE_STMT,dbc,&stmtHc);
SQLBindParameter(stmtHc, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &mItem, 0, NULL);
SQLBindParameter(stmtHc, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, static_cast<void*>(swi), 0, NULL);
if(SQLExecDirect(stmtHc, (SQLWCHAR*)L"CALL dba.sp_LvHeader( ?, ? )", SQL_NTS)==SQL_SUCCESS) {
SQLINTEGER cbalign,cbwidth;
SQLWCHAR sztxt[40];
SQLBindCol(stmtHc, 1, SQL_C_WCHAR, &sztxt, sizeof(sztxt), NULL);
SQLBindCol(stmtHc, 2, SQL_INTEGER, &cbalign, 0, NULL);
SQLBindCol(stmtHc, 3, SQL_INTEGER, &cbwidth, 0, NULL);
rc=SQLFetch(stmtHc);
int *iHc=new int(0);
while(rc==SQL_SUCCESS || rc==SQL_SUCCESS_WITH_INFO) {
LvCol.fmt=((cbalign==0) ? LVCFMT_LEFT : LVCFMT_RIGHT);
LvCol.pszText=sztxt;
/*
SendMessage(hGrid,LVM_INSERTCOLUMN,*iHc,(LPARAM)&LvCol);
SendMessage(hGrid,LVM_SETCOLUMN,*iHc,(LPARAM)&LvCol);
SendMessage(hGrid,LVM_SETCOLUMNWIDTH,*iHc,MAKELPARAM((int)cbwidth,0));
*/
ListView_InsertColumn(hGrid,*iHc,&LvCol);
ListView_SetColumn(hGrid,*iHc,&LvCol);
ListView_SetColumnWidth(hGrid,*iHc,cbwidth);
*iHc+=1;
rc=SQLFetch(stmtHc);
}
delete iHc;
}
SQLFreeHandle(SQL_HANDLE_STMT,stmtHc);
} else {
ListView_DeleteAllItems(hGrid);
}
memset(&LvItem,0,sizeof(LvItem));
LvItem.mask=LVIF_TEXT;
LvItem.cchTextMax=256;
int *iItem=new int(0);
int *isubItem=new int(0);
rc=SQLFetch(stmtR);
while(rc==SQL_SUCCESS || rc==SQL_SUCCESS_WITH_INFO) {
int *i=new int(1);
while((rc1=SQLGetData(stmtR,*i,SQL_C_WCHAR,szData,256,&cbData)) == SQL_SUCCESS) {
if(cbData==SQL_NULL_DATA) {
*szData=(WCHAR)NULL;
}
if(*isubItem==0) {
LvItem.iItem=*iItem;
LvItem.iSubItem=*isubItem;
//SendMessage(hGrid,LVM_INSERTITEM,(WPARAM)0,(LPARAM)&LvItem);
ListView_InsertItem(hGrid,&LvItem);
}
LvItem.iSubItem=*isubItem;
LvItem.pszText=szData;
//SendMessage(hGrid,LVM_SETITEM,(WPARAM)0,(LPARAM)&LvItem);
ListView_SetItem(hGrid,&LvItem);
*i+=1;
*isubItem+=1;
}
*iItem+=1;
*isubItem=0;
rc=SQLFetch(stmtR);
delete i;
}
delete iItem;
delete isubItem;
delete [] szData;
SQLCloseCursor(stmtR);
SQLFreeHandle(SQL_HANDLE_STMT,stmtR);
ListView_SetItemState(hGrid,0,LVIS_SELECTED,LVIS_SELECTED);
ListView_SetItemState(hGrid,0,LVIS_FOCUSED,LVIS_FOCUSED);
return;
}