![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу нормально изменить размеры окна [D7, WinXP]
Aleksandr. © (2004-05-27 13:39:00)Функцией CreateWindowEx создаю окно, затем в него пишется текст. Процедура, записываюшая в него текст посылкой сообщения, сначала вычисляет ширину текста по DC этого окна:
procedure WriteWaiter(MsgText : string);
var
P : size;
DC : HDC;
R, T : TRect;
begin
if WaitFormHandle<>0 then begin //Нэндл апишного окна
DC:=GetDC(WaitFormHandle);
try
GetTextExtentPoint32(DC,PChar(MsgText),length(MsgText),P);
finally
ReleaseDC(WaitFormHandle,DC)
end;
GetWindowRect(WaitFormHandle,T); //предыдущий размер
if P.cx>T.Right-T.Left then begin //
GetWindowRect(GetDesktopWindow,R); //размер экрана
SetWindowPos(WaitformHandle,0,R.Left+((R.Right-P.cx) div 2),R.Top+((R.Bottom-P.cy) div 2),
P.cx,T.Bottom-T.Top,{SWP_NOACTIVATE OR} swp_DrawFrame);
UpdateWindow(WaitFormHandle)
end;
// посылаем текст надстройкой над PostMessage
PostStrMessage(WaitFormHandle,WM_SetUserText,MsgText);
end
end;
И что-то не так с этим кодом, потому что окно получается срезанное справа (нет рамки), а при посылке следующего текста оно смещается влево, и текст в нем, рисующийся
DrawText(DC,PChar(s),-1,R,dt_Center+dt_VCenter+DT_END_ELLIPSIS)
после смены размера теряет выключку по центру.
Shkut (2004-05-27 17:41:00) [1]А чем отличается Дом от квартиры?
Ответ: доступными размерами.
WindowRect - размеры всего окна, с рамочками и т. д.
ClientRect - свободная для операций область. (грубо)
Aleksandr. (2004-05-27 14:14:00) [2]А чем отличается?
Игорь Шевченко (2004-05-27 13:59:00) [3]
> GetWindowRect(WaitFormHandle,T); //предыдущий размер
Может, GetClientRect ?