박지훈님, 장성호님 답변 감사드립니다.
큰 도움이 되었습니다. ^^
장성호 님이 쓰신 글 :
: 질문 올라왔을때 혹시 관련함수가 있나 찾아봤는데 안나와서
: 직접 만들어 봤었습니다.
:
:
: //함수
: String __fastcall StrToFitStr(TCanvas *Canvas,int CanvasWid,String str)
: {
: const String c=" ... ";
: WideString wStr=str;
:
: if(Canvas->TextWidth(str)>CanvasWid)
: {
: int tLen=0;
: String tmpS;
: for(int i=1;iTextWidth(tmpS);
: if(tLen>=CanvasWid)
: {
: return wStr.SubString(1,i-1)+c;
: }
: }
: return str;
: }
: else
: return str;
: }
:
: //사용예
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: TCanvas *Can=new TCanvas;
: Can->Handle=GetDC(Panel1->Handle);
: Can->Font=Panel1->Font;
: String str=Edit1->Text;
: Panel1->Caption=StrToFitStr(Can,Panel1->Width-5,str);
: delete Can;
: }
:
:
: 그런데 임프님의 답변을 보고 검색해보니
: PathCompactPath 라는 api 가 있네요
:
http://msdn.microsoft.com/en-us/library/bb773575(VS.85).aspx
:
: 이 함수는 File_Path를 줄여주는 함수인데요
: "C:\Program Files\Borland\CBuilder6\Bin\bcb.exe" 라는 파일명이 있으면
:
: "C:\...bcb.exe" 뭐 이런식으로 바꿔주는 함수입니다.
: 즉 말줄임표("...") 가 가운데나 앞에 붙습니다.
:
: 그런데 file path가 아니라 그냥 string이면 말줄임표("...")가 뒤에 붙습니다.
: 예를 들어
: String "ABCDEFGHIJKLMN" 의 경우 "ABCD..." 뭐 이런식으로 나오죠
:
:
:
: #include
: //link: Shlwapi.lib
: void __fastcall TForm1::Button8Click(TObject *Sender)
: {
: char szShortPath[30];
: String str1="my name is jang sung ho";
: String str2="C:\\Program Files\\Borland\\CBuilder6\\Bin\\bcb.exe";
:
: PathCompactPathEx(szShortPath, str2.c_str(), 28,0);
: ShowMessage(szShortPath); //결과 = "C:\Program Files...\bcb.exe"
:
: PathCompactPathEx(szShortPath, str1.c_str(), 20,1);
: ShowMessage(szShortPath); //결과 = "my name is jang ..."
:
: }
:
:
: 정리하면
: 1. 직접 Draw하시는 경우라면 임프님이 소개한 DrawTextEx 함수를 쓰면 될것 같구요
: 2. 그냥 string을 가져오려면 StrToFitStr 나 PathCompactPath 함수를 쓰시면 될듯 합니다.
:
:
: 그럼
:
: 박지훈.임프 님이 쓰신 글 :
: : 원하시는 기능의 함수로는 VCL에서는 MinimizeName()이라는 함수가 있는데..
: : 이 함수는 정확하게는 아무 문자열이나 쓰기 위한 것이 아니라 길쭉한 파일 경로명만을 위한 함수이기 때문에, 적절하지는 않습니다. 실제로 써보시면, 비슷하게는 동작하지만 뭔가 좀 이상할 겁니다.
: :
: : 그 목적에 딱 맞는 함수는 Win32 함수중의 DrawTextEx() 함수입니다.
: : 이 함수는 원래는 단순히 문자열을 지정한 Rect 영역에 그리기 위한 함수인데, DWORD 타입인 마지막 인자에 DT_END_ELLIPSIS와 DT_MODIFYSTRING 값을 넣어주면 원하시는 것처럼 문자열이 지정 Rect 영역을 벗어나는 뒷부분을 줄임표시(...)로 대체해서 줄여줍니다.
: :
: : 그럼...
: :
: :
: : skjoon 님이 쓰신 글 :
: : : 첨부한 그림은 윈도우 탐색기의 일부를 캡쳐한 것인데요.
: : : 텍스트가 지정된 Width를 넘어서면 뒷부분을 자르고 "..."을 붙여서 텍스트가 줄여짐을 나타내줍니다.
: : : 혹시 vcl이나 윈도우 api 중에서 이 기능을 해주는 녀석이 있는지 궁금하네요.
: : : 만들려고 하다가.. 먼저 찾아보고 쓰려구요 ^^;;
: : :
: : : 좋은 하루 되세요~