* RCTV.PRG Right Click Tree View PUBLIC oform,unLTVX,unLTVY xxGetDisplayMetrics() oform=CREATEOBJECT('myform') oform.addobject('ocxTreeView','ocxTreeViewClass',; 'MSComctlLib.TreeCtrl.2') * Add some test Nodes oTV=oform.ocxTreeView WITH oTV oTV.width=oform.width oTV.height=oform.height .linestyle=1 oTV.nodes.add(,1,"R1","Root Node 1") oTV.nodes.add("R1",4,"R1C1","Root Node 1 Child 1") oTV.nodes.add("R1",4,"R1C2","Root Node 1 Child 2") oTV.nodes.add(,1,"R2","Root Node 2") oTV.nodes.add("R2",4,"R2C1","Root Node 2 Child 1") ENDWITH oform.visible=.t. DEFINE CLASS myform as Form PROCEDURE resize this.ocxTreeView.height=this.Height this.ocxTreeView.width=this.Width ENDPROC autocenter=.t. ENDDEFINE &&myform DEFINE CLASS ocxTreeViewClass as OleControl visible=.t. top=0 PROCEDURE mousedown (button, shift, x, y) IF button=2 && Right Mouse oNode=this.HitTest(X*unLTVX,Y*unLTVY) this.nodeclick(oNode) MESSAGEBOX(this.SelectedItem.text,0,[TV - Right Mouse Down]) ELSE ENDIF ENDPROC &&MouseDown PROCEDURE nodeclick(Node) node.selected=.t. ENDPROC ENDDEFINE &&ocxTreeView PROCEDURE xxGetDisplayMetrics LOCAL liHwnd,liHDC,liPixelsPerInchX,liPixelsPerInchY declare integer GetActiveWindow in WIN32API declare integer GetDC in WIN32API integer iHDC declare integer GetDeviceCaps in WIN32API integer iHDC,integer iIndex * Device context liHwnd=GetActiveWindow() liHDC=GetDC(liHwnd) * Pixels per Inch liPixelsPerInchX=GetDeviceCaps(liHDC,88) liPixelsPerInchY=GetDeviceCaps(liHDC,90) * Twips per pixel and store unLTVX=1440/liPixelsPerInchX unLTVY=1440/liPixelsPerInchY CLEAR DLLS ENDPROC &&xxGetDisplayMetrics * END RCTV