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:你的逻辑很有趣;)对不起,我没有注意到你已经找到了答案。但把答案放在这里是最好的方式。