スタティックコントロールで SS_ENDELLIPSIS スタイルが設定されているとき、スタティックコントロールのウィンドウサイズ内に設定されたテキストが収まりきらない場合は、省略記号「…」がテキストの末尾に挿入されテキストが省略されます。例えば下記のように

この省略記号が表示されているかどうかを判定する API は私の知る限りありませんので、おそらく独自に判定する必要があります。判定するコードを書きましたので紹介します。

プロジェクトのダウンロード

BOOL HasWordEllipsis(HWND hStatic)
{
	RECT rect;
	GetClientRect(hStatic, &rect);
	const int nClientWidth = rect.right;
	const int nTextLength = GetWindowTextLength(hStatic);
	LPTSTR lpszText = (LPTSTR)GlobalAlloc(GMEM_FIXED, (nTextLength + 1) * sizeof(TCHAR));
	GetWindowText(hStatic, lpszText, nTextLength + 1);
	const HDC hdc = GetDC(hStatic);
	const HFONT hFont = (HFONT)SendMessage(hStatic, WM_GETFONT, 0, 0);
	const HFONT hOldFont = (HFONT)SelectObject(hdc, hFont);
	DrawText(hdc, lpszText, nTextLength, &rect, DT_CALCRECT);
	SelectObject(hdc, hOldFont);
	ReleaseDC(hStatic, hdc);
	GlobalFree(lpszText);
	return nClientWidth < rect.right;
}

引数: スタティックコントロールのウィンドウハンドル
戻り値: 省略記号が表示されているときは TRUE、それ以外は FALSE。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です