[DllImport("shlwapi.dll", CharSet=CharSet.Auto)]
static extern bool PathCompactPath(IntPtr hDC, [In, Out] StringBuilder pszPath, int dx);
''' <summary>
''' Truncates a file path to fit within a given pixel width by replacing path components with ellipses.
''' </summary>
''' <param name="hDC">A handle to the device context used for font metrics. This value can be NULL.</param>
''' <param name="lpszPath">A pointer to a null-terminated string of length MAX_PATH that contains the path to be modified. On return, this buffer will contain the modified string.</param>
''' <param name="dx">The width, in pixels, in which the string must fit.</param>
''' <returns>Returns TRUE if the path was successfully compacted to the specified width. Returns FALSE on failure, or if the base portion of the path would not fit the specified width.</returns>
<DllImport("shlwapi.dll", EntryPoint:="PathCompactPathW", SetLastError:=True, CharSet:=CharSet.Unicode)> _
Public Function PathCompactPath(hDC As IntPtr, _
<MarshalAs(UnmanagedType.LPTStr)>lpszPath As System.Text.StringBuilder, _
dx As UInteger) As <MarshalAs(UnmanagedType.Bool)>Boolean
End Function
Public Declare Function PathCompactPath Lib "shlwapi" Alias "PathCompactPathA" _
(ByVal hDC As Long, _
ByVal lpszPath As String, _
ByVal dx As Long) As Long
None.
If you do not have a HDC available, take a look at PathCompactPathEx
Please add some!
public partial class frmMain : Form
{
[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
static extern bool PathCompactPath(IntPtr hDC, [In, Out] StringBuilder pszPath, int dx);
public string PathCompactPath(string path, int pixel)
{
Graphics gc = this.CreateGraphics();
StringBuilder strBuffer = new StringBuilder(path);
PathCompactPath((IntPtr)gc.GetHdc(), strBuffer, pixel);
return strBuffer.ToString();
}
}
Public Partial Class frmMain
Inherits System.Windows.Forms.Form
<DllImport("shlwapi.dll", EntryPoint:="PathCompactPathW", SetLastError:=True, CharSet:=CharSet.Unicode)> _
Public Function PathCompactPath(hDC As IntPtr, _
<MarshalAs(UnmanagedType.LPTStr)>lpszPath As System.Text.StringBuilder, _
dx As UInteger) As <MarshalAs(UnmanagedType.Bool)>Boolean
End Function
Public Function PathCompactPath(path As String, pixel As Integer) As String
Dim gc As Graphics = Me.CreateGraphics()
Dim strBuffer As New StringBuilder(path);
PathCompactPath(gc.GetHdc(), strBuffer, pixel)
Return strBuffer.ToString()
End Function
End Class
Do you know one? Please contribute it!