Пытаюсь установить размер Edit Box-a на диалоге, но почему-то не получается.
Вот что я делаю (хочу получить Edit 20 символов х 2 строки)
// в процедуре OnInitDialog()
// m_editCtrl - это EditBox
// font - это CFont
// устанавливаю моноширинный шрифт
LOGFONT lf;
ZeroMemory(&lf, sizeof(lf));
lf.lfHeight=16;
lf.lfCharSet=RUSSIAN_CHARSET;
lf.lfPitchAndFamily=FIXED_PITCH | FF_MODERN; // моноширинный шрифт
font.CreateFontIndirect(&lf);
m_editCtrl.SetFont(&font, FALSE);
CClientDC cdc(&m_editCtrl);
// вычисляю размер бордера у Edit-а
CRect cRect, allRect;
m_editCtrl.GetClientRect(&cRect);
m_editCtrl.GetWindowRect(&allRect);
m_editCtrl.ScreenToClient(&allRect);
CSize borderSize(allRect.Width()-cRect.Width(),
allRect.Height()-cRect.Height() );
CSize cs=cdc.GetTextExtent("0"); // размер одного символа
// устанавливаю размер окна EditBox-а
m_editCtrl.SetWindowPos(NULL,
0, 0, cs.cx*20+borderSize.cx, cs.cy*2+borderSize.cy,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE );
В итоге, шрифт устанавливается, размер меняется, но в одну строку влезает 22
символа, вместо 20. Что я забыл учесть?
Leha
LB> Пытаюсь установить размер Edit Box-a на диалоге, но почему-то не
LB> получается.
...
Проблему почти решил. Оказалось, что хотя я и устанавливаю шрифт для Edit-а
m_editCtrl.SetFont(...) и он действительно устанавливается, но после
CClientDC cdc(&m_editCtrl);
CSize cs=cdc.GetTextExtent("0"); // размер одного символа
возвращается размер символа для системного шрифта. пришлось делать так:
CClientDC cdc(&m_editCtrl);
CFont *of=cdc.SelectObject(m_editCtrl.GetFont());
CSize cs=cdc.GetTextExtent("0"); // размер одного символа
cdc.SelectObject(of);
теперь размер символа вычисляется правильно, но проявилась другая проблема -
текст в Edit-е выводится не с точки (0,0) его клиентской области, а с
установленной экспериментально для моего ПК точки (3,3), независимо от размера
шрифта. Соответственно вычисляемый размер окна должен учитывать это смещение.
Интересно, как можно узнать это смещение не экспериментально?
Leha
15 сентября 2006 09:53, Leha Bishletov писал All:
LB> текст в Edit-е выводится не с точки (0,0) его клиентской области, а с
LB> установленной экспериментально для моего ПК точки (3,3), независимо от
LB> размера шрифта. Соответственно вычисляемый размер окна должен
LB> учитывать это смещение. Интересно, как можно узнать это смещение не
LB> экспериментально?
Hе помню точно вроде
GetSystemMetrics(SM_CXDLGFRAME)/GetSystemMetrics(SM_CYDLGFRAME)
Посмотри в msdn
Bye Leha!