2010-08-17 4 views
0

Я создаю окно, которое открывается динамическому названию. Я хотел бы, чтобы заголовок окна был усечен, если размер окна изменился, и нет места, чтобы показать полный заголовок.Как усечь заголовок HWND

К примеру, у меня есть

HWND handle = GetHWND(); // gets me the correct handle 
std::wstring title = L"some fairly long window title"; 
SetWindowTextW(handle, title.c_str()); 

Есть либо способ автоматического усечения названия HWND или попеременно способ получить пиксели ширину текста заголовка, так что я могу установить заголовок вручную, если окно психиатры?

+0

Да? Что происходит с * текстом вашего * окна, когда вы делаете его меньше? –

+0

Должно было сделать это более ясным. Я хочу, чтобы текст окна обрезался на основе размера заголовка (на самом деле у него может быть достаточно места, чтобы быть длиннее). –

ответ

1

Вы можете получить ширину строки, нарисованной для данного контекста устройства (HDC), с помощью функции GetTextExtentPoint32.

1

Вместо того, чтобы устанавливать текст через SetWindowText, ответьте на WM_GETTEXT.. Эти два связаны: DefWindowProc отвечает на WM_GETTEXT, возвращая значение, установленное ранее с помощью SetWindowText.

Теперь, когда вы получаете сообщение WM_GETTEXT, вы можете вернуть текст, подходящий в данный момент, принимая во внимание текущую ширину.