Truncating Long File Names and Displaying an Ellipses

I've seen a few articles that illustrate different techniques used in order to display an ellipses in the path. However, a simpler approach might be to use the new Shell path function: PathCompactPath.

BOOL PathCompactPath(
 HDC    hDC,
 LPTSTR lpszPath,
 UINT   dx
);
This function truncates a file path to fit within a given pixel width by replacing path components with ellipses.
  • Returns TRUE if successful, or FALSE otherwise.
hDC
Handle to the device context used for font metrics.
lpszPath
Address of the string to be modified.
dx
Width, in pixels, that the string will be forced to fit within.

This function uses the font currently selected in hDC to calculate the width of the text. This function will not compact the path beyond the base file name preceded by ellipses.

Example


#include <windows.h>
#include <iostream.h>
#include "Shlwapi.h"
HDC hdc;  /* display DC handle for current font metrics */ 

void main( void )
{

 // String path name 1.
 char buffer_1[] = "C:\\path1\\path2\\sample.txt";
 char *lpStr1;
 lpStr1 = buffer_1;
	 
 // String path name 2.
 char buffer_2[] = "C:\\path1\\path2\\sample.txt";
 char *lpStr2;
 lpStr2 = buffer_2;
	
 // String path name 3.
 char buffer_3[] = "C:\\path1\\path2\\sample.txt";
 char *lpStr3;
 lpStr3 = buffer_3;

 // String path name 4.
 char buffer_4[] = "C:\\path1\\path2\\sample.txt";
 char *lpStr4;
 lpStr4 = buffer_4;
	
 // Variable to get the return from "PathCompactPath".
 int retval;	
	
 cout << "The un-truncated path is                " << lpStr1 << endl;

 retval = PathCompactPath(hdc,lpStr1,125);
 cout << "The truncated path at 125 pixels is :   " << lpStr1 << endl;

 retval = PathCompactPath(hdc,lpStr2,120);
 cout << "The truncated path at 120 pixels is :   " << lpStr2 << endl;

 retval = PathCompactPath(hdc,lpStr3,110);
 cout << "The truncated path at 110 pixels is :   " << lpStr3 << endl;

 retval = PathCompactPath(hdc,lpStr4,25);
 cout << "The truncated path at  25 pixels is :   " << lpStr4 << endl;
}

Output of Example

The un-truncated path is C:\path1\path2\sample.txt
The truncated path at 125 pixels is : C:\path1\...\sample.txt
The truncated path at 120 pixels is : C:\pat...\sample.txt
The truncated path at 110 pixels is : C:\p...\sample.txt
The truncated path at 25 pixels is : ...\sample.txt


Comments

  • long path tool

    Posted by derikogay on 01/28/2014 05:47am

    Well, you can use Long Path Tool for such problems,it works good I will say.

    Reply
  • Same can be done without shlwapi.dll

    Posted by Legacy on 03/14/2000 12:00am

    Originally posted by: Peter Ritchie

    Both DrawText and DrawTextEx support the DT_PATH_ELLIPSIS flag that allows truncation of a path to fit a specific width (or rectangle) in much the same was a described in this article.

    Reply
  • am i missing something here ?

    Posted by Legacy on 08/02/1999 12:00am

    Originally posted by: Gunnar Bolle

    or isn't that just the help article for PathCompactPath from the MSDN Library ?
    IMO submitting KB or help articles from MSDN library isn't very helpfull - especially if you forget to mention that this function only works with ie 4 installed. (95/NT)

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Cloud computing isn't new, but it's still a hot topic in technology circles. Moving to the cloud has done great things for many businesses. When it comes to handling a basic business necessity, cloud computing has brought many improvements to overall business continuity. Using the cloud for DR makes a lot of sense for many, but it's not exactly the most simple concept. Read this eBook to find answers to all the key questions IT professionals have about cloud-based disaster recovery, and helpful info around the …

  • Live Event Date: July 8, 2015 @ 2:00 p.m. ET / 11:00 a.m. PT With business driving the increasing adoption of agile methodologies such as Continuous Integration and Continuous Deployment, the need for agile database tooling has become even more important. In many companies, the database development lifecycle has become the bottleneck in an otherwise agile delivery process. As such, database professionals are under increasing pressure to shorten delivery timelines even further, only increasing the stakes …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date