Truncating Long File Names and Displaying an Ellipses
Posted
by Mike Mike
on July 29th, 1999
BOOL PathCompactPath( HDC hDC, LPTSTR lpszPath, UINT dx );
- 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.txtThe 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
Same can be done without shlwapi.dll
Posted by Legacy on 03/14/2000 12:00amOriginally 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.
Replyam i missing something here ?
Posted by Legacy on 08/02/1999 12:00amOriginally posted by: Gunnar Bolle
or isn't that just the help article for PathCompactPath from the MSDN Library ?
ReplyIMO 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)