2015. 10. 2. 13:26ㆍIT-개발/winapi 및 MFC
CStatic 컨트롤에 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 이런 경로를 표현하고 싶어서
해보니~ 문자열이 길어서 짤린다. 그래서 생략되게 나오는 법을 알아보니... 있단다~ 어디서 본듯 하기도 하고~
리소스뷰에서 static 컨트롤을 선택하니 ... 눈에 띄는 녀석이 두녀석 있다.
End Ellipsis
Path Ellipsis
Ellipsis : 생략 이라는 뜻이란다... 영어는 일단 잘하고 볼 일이다. ㅠㅠ..
실제로 이 두 녀석중 하나를 true로 설정하면 컨트롤보다 긴 문자열이 나타날때, 다음과 같이 생략되게 표현된다.
End Ellipsis : "C:\Program Files (x86)\Google\Chrome\..."
Path Ellipsis : "C:\Program Files (x86)\...\chrome.exe"
요기까지는 어디까지나 걍 기본 CStatic을 사용했을때 이다.... 가만히 내가 사용하고 있는 CStatic을 보니....
상속받아서 새로 만든거다... 그래서인지 이 둘중 하나를 true로 설정해도 동작을 하지 않는다.. ㅠㅠ...
OnPaint에서 자기 맘대로 동작하도록 코딩되어 있다.... 요기서 그럼 위에 처럼 End Ellipsis. Path Ellipsis 가
적용되게 하려면 어떻하나?
DrawText() 함수 부분을 찾아보니~~ 역시나~~ 이런 설정이 안먹히도록 하드코딩 되어 있다..
pDC->DrawText(sText, -1, rect, nFormat); 에서 nFormat에 다음의 설정들을 조합해서 넣으면
DrawText에 다양한 옵션을 적용할 수 있다.
DT_PATH_ELLIPSIS
DT_END_ELLIPSIS
이 두개는 내가 위에서 원하는 출력을 얻기 위해 필요한 옵션이고 이외에도 많다.
MSDN에 자세한 설명도 있다...
https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx
/*
* DrawText() Format Flags
*/
#define DT_TOP 0x00000000
#define DT_LEFT 0x00000000
#define DT_CENTER 0x00000001
#define DT_RIGHT 0x00000002
#define DT_VCENTER 0x00000004
#define DT_BOTTOM 0x00000008
#define DT_WORDBREAK 0x00000010
#define DT_SINGLELINE 0x00000020
#define DT_EXPANDTABS 0x00000040
#define DT_TABSTOP 0x00000080
#define DT_NOCLIP 0x00000100
#define DT_EXTERNALLEADING 0x00000200
#define DT_CALCRECT 0x00000400
#define DT_NOPREFIX 0x00000800
#define DT_INTERNAL 0x00001000
#if(WINVER >= 0x0400)
#define DT_EDITCONTROL 0x00002000
#define DT_PATH_ELLIPSIS 0x00004000
#define DT_END_ELLIPSIS 0x00008000
#define DT_MODIFYSTRING 0x00010000
#define DT_RTLREADING 0x00020000
#define DT_WORD_ELLIPSIS 0x00040000
#if(WINVER >= 0x0500)
#define DT_NOFULLWIDTHCHARBREAK 0x00080000
#if(_WIN32_WINNT >= 0x0500)
#define DT_HIDEPREFIX 0x00100000
#define DT_PREFIXONLY 0x00200000
#endif /* _WIN32_WINNT >= 0x0500 */
#endif /* WINVER >= 0x0500 */
에고고 어쨌든.....
msadn에 보니 DT_END_ELLIPSIS 요런거 하고 싶으면, DT_MODIFYSTRING를 꼭 함께 하란다...
그래서 요렇게 해줬다. 그러니~~ 잘나오네요... ㅎㅎ
nFormat |= (DT_END_ELLIPSIS | DT_MODIFYSTRING); // DT_MODIFYSTRING 는 않해줘도 잘 된다. ㅋㅋㅋ 해보니~
혹시나해서... 요넘은 빼도록 했다.
nFormat &= ~(DT_WORDBREAK | DT_EDITCONTROL);
요렇게 해서 비트값을 제거 해줬다.
이글은 CStatic에 대한 건가? DrawText에 대한건가? 아님 비트 연산 +, - 해주는 방법에 대한건가?
모르겠지만 짬뽕으로 나간다~ ㅋㅋㅋ 잘 기억해놓자~
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
RAW socket 생성 Error - 원인은 관리자 권한 문제 (0) | 2015.11.24 |
---|---|
CComboBox dynamic 생성 / AddString (0) | 2015.11.18 |
OutputDebugString - 잘쓰기 (펌) (0) | 2015.09.30 |
DLL 만들때, 정적 라이브러리에서 MFC 사용 !!!(펌) (0) | 2015.09.24 |
특정 폴더를 한번에 삭제하기(폴더안 파일까지 포함) [펌] (0) | 2015.09.18 |