La funzione riceve questi parametri
EH_NOTIFYPARAMS ed è usata per gestire le notifiche della treeview.
Essendo una funzione di subclassing viene chiamata prima e dopo la funzione reale
enMode indica quando viene chiamata : EXT_PREV (prima) o EXT_AFTER (dopo) la chiamata reale.
Elenco di tutte le notifiche disponibili
http://msdn.microsoft.com/en-us/library/windows/desktop/ff486107(v=vs.85).aspxLRESULT _TreeViewNotify(EH_NOTIFYPARAMS)
{
LPNMHDR lpnmh;
LPNMTVDISPINFO ptvdi;
FXD_ELEMENT sFxd;
INT iIndex;
LPNMTREEVIEW lpnmtv;
LPNMTVKEYDOWN pnkd;
TVITEM item;
LPNMHDR pnmh=(LPNMHDR ) lParam;
lpnmh = (LPNMHDR) lParam;
switch(pnmh->code)
{
case TVN_BEGINLABELEDIT: // <-- Inizio di un editing della label
break;
//
// Rinomina / Rename
//
case TVN_ENDLABELEDIT: // <-- Fine un editing della label
if (enMode!=EXT_AFTER) break;
ptvdi = (LPNMTVDISPINFO) lParam;
if (ptvdi->item.pszText==NULL) break; // testo idem interessato
if (ptvdi->item.lParam==0) // // Id numerico assegnato all'item
{
fxdServer(WS_REALSET,FHD_SET_NAME,ptvdi->item.pszText); // Rinomino l'oggetto con il nuovo testo dell'item
}
else
{
iIndex=fxdServer(WS_FIND,ptvdi->item.lParam,NULL); // Cerco attravero id contenuto nell'item
fxdServer(WS_REALGET,iIndex,&sFxd);
if (sFxd.psTableInfo) {
.
.
.
}
*pbReturn=TRUE; // <-- Non deve andare avanti con la funzione originale
return TRUE;
case TVN_SELCHANGING: // <-- Cambio di selezione (clicchi su un ramo)
if (enMode!=EXT_AFTER) break;
if (_db.itemFocus>-1) _OnBlurWrite();
lpnmtv = (LPNMTREEVIEW) lParam;
iIndex=fxdServer(WS_FIND,lpnmtv->itemNew.lParam,NULL);
if (iIndex<0) {_TableExtract(-1,FO_FIELD|FO_INDEX,TRUE); break;}
fxdServer(WS_REALGET,iIndex,&sFxd);
switch (sFxd.iType)
{
case FHD_TABLE:
_db.itemFocus=iIndex;
ShowWindow(_db.hwndSTTable,SW_SHOW);
ShowWindow(_db.hwndQuery,SW_HIDE);
ShowWindow(_db.hwndLVFields,SW_SHOW);
ShowWindow(_db.hwndLVIndex,SW_SHOW);
_TableExtract(iIndex,FO_FIELD|FO_INDEX,TRUE);
break;
case FHD_VIEW:
case FHD_QUERY:
_db.itemFocus=iIndex;
ShowWindow(_db.hwndSTTable,SW_SHOW);
ShowWindow(_db.hwndQuery,SW_SHOW);
ShowWindow(_db.hwndLVFields,SW_HIDE);
ShowWindow(_db.hwndLVIndex,SW_HIDE);
_ViewExtract(iIndex,FO_FIELD|FO_INDEX,TRUE);
break;
default:
_db.itemFocus=-1;
_TableExtract(-1,FO_FIELD|FO_INDEX,TRUE);
ShowWindow(_db.hwndSTTable,SW_HIDE);
ShowWindow(_db.hwndQuery,SW_HIDE);
ShowWindow(_db.hwndLVFields,SW_HIDE);
ShowWindow(_db.hwndLVIndex,SW_HIDE);
break;
}
break;
case TVN_ITEMEXPANDED: // <-- Espansione di un ramo dell'albero
if (enMode!=EXT_AFTER) break;
lpnmtv = (LPNMTREEVIEW) lParam;
iIndex=fxdServer(WS_FIND,lpnmtv->itemNew.lParam,NULL);
if (iIndex<0) break;
if (!_db.bLockItemUpdate)
{
//TV_ITEM Item = lpnmtv->itemNew;
fxdServer(WS_REALGET,iIndex,&sFxd);
if (lpnmtv->action==1) sFxd.psFolderInfo->bOpen=FALSE; else sFxd.psFolderInfo->bOpen=TRUE;
fxdServer(WS_REALSET,iIndex,&sFxd);
ZeroFill(item);
item.hItem = lpnmtv->itemNew.hItem; //EhTreeViewSearch(hWnd,lpnmtv->itemNew.lParam);
item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
TreeView_GetItem(sSetup.hwndTVDbase,&item);
item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
if (lpnmtv->action==1) // Metto l'icone chiusa
{
item.iImage = imgFolderClose;
item.iSelectedImage= imgFolderClose;
TreeView_SetItem(sSetup.hwndTVDbase, &item);
}
else // Metto l'icone aperta
{
item.iImage = imgFolderOpen;
item.iSelectedImage= imgFolderOpen;
TreeView_SetItem(sSetup.hwndTVDbase, &item);
}
//*fReturn=TRUE;
//return TRUE;
}
break;
case TVN_KEYDOWN: // <-- Pressione di un tasto
if (enMode!=EXT_AFTER) break;
pnkd = (LPNMTVKEYDOWN) lParam;
if (pnkd->wVKey==VK_DELETE)
{
ZeroFill(item);
item.mask=TVIF_PARAM;
item.hItem=TreeView_GetSelection(lpnmh->hwndFrom);
TreeView_GetItem(lpnmh->hwndFrom,&item);
eventPush(EE_OBJ,item.lParam,NULL,"SQL:T_DEL");
}
break;
}
return 0;
}
Parametri
Valori di ritorno
Commenti