Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带MFC的路径缩短器_C++_Windows_Winapi_Mfc - Fatal编程技术网

C++ 带MFC的路径缩短器

C++ 带MFC的路径缩短器,c++,windows,winapi,mfc,C++,Windows,Winapi,Mfc,我需要在我的应用程序的上下文菜单中显示路径,并需要找到一种方法来缩短它们。例如,如果原始路径是c:\ClientName\ProjectName\ProgramName\ComponentName\SomeFileName.cpp我需要将其转换为类似c:\ClientName\…\SomeFileName.cpp的内容,那么Microsoft应用程序在其“最近使用”列表中会做些什么 所以我很好奇,是否有任何内置的方法可以用C++/MFC或者WinAPI来实现这一点?有一个Win32 API可以获

我需要在我的应用程序的上下文菜单中显示路径,并需要找到一种方法来缩短它们。例如,如果原始路径是
c:\ClientName\ProjectName\ProgramName\ComponentName\SomeFileName.cpp
我需要将其转换为类似
c:\ClientName\…\SomeFileName.cpp
的内容,那么Microsoft应用程序在其“最近使用”列表中会做些什么


所以我很好奇,是否有任何内置的方法可以用C++/MFC或者WinAPI来实现这一点?

有一个Win32 API可以获取名为GetShortPathName的短路径名,请阅读下面的内容。这可能会有帮助


使用将通过用省略号替换路径组件来截断路径。

drawtextextex
使用
DT\u MODIFYSTRING
DT\u path\u省略号
标志。@JonathanPotter:但我没有画任何东西。我需要转换字符串本身。好的,不用担心。我可能已经找到我需要的了:。根据MSDN的评论,我有一个小错误,但是,哦,好吧,
DT\u MODIFYSTRING
标志确实转换了字符串。它取决于您要执行的操作,但是
pathcomactpathex
压缩到指定数量的字符,而
drawtextextex
压缩到指定数量的像素。如果您不想实际呈现任何可见的内容,可以绘制到屏幕外的DC。@JonathanPotter:有趣。我不知道。我还发现,如果需要按像素宽度缩短字符串,您可以使用它,不幸的是,它具有愚蠢的Windows Shell限制
MAX_PATH
长度。
GetShortPathName
返回旧式(DOS)8.3文件路径。这与我的问题无关。@c00000fd,在许多文件系统中,文件名的每个组件中都会包含一个波浪号(~),该波浪号太长,不符合8.3命名规则。当然,由于文档中所述的原因,它不能保证工作。但如果是,它应该返回一个较短的字符串,就像你要求的那样。@chris:你的逻辑很有趣;)对不起,我没有注意到你已经找到了答案。但把答案放在这里是最好的方式。