Funzione per la gestione notifiche

7.2.3.1/2
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).aspx



LRESULT _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

Easyhand C/C++: Funzione per la gestione notifiche | Last modified: 15/02/2014 10.54.55 Europe/Rome | #1.2249
P.. 1170
Page Visible: as draft
Easyhand C/C++
Una mano alle tue idee.
Privacy Policy