Здравствуйте, c-smile, Вы писали:
CS>Такое впечатление что у тебя где-то вызов SciterGetMin/MaxWidth/Height() где-то воткнут не по делу.
Воткнут, да. Но казалось бы, что по делу — реакция на
WM_GETMINMAXINFO для ограничения минимального размера диалога:
INT_PTR scdialog::on_WM_GETMINMAXINFO(HWND hwndDlg, WPARAM wParam, LPARAM lParam)
{
RECT rcScreen;
::GetWindowRect(hwndDlg, &rcScreen);
RECT rcClient = rcScreen;
::ScreenToClient(hwndDlg, (LPPOINT)&rcClient);
::ScreenToClient(hwndDlg, (LPPOINT)&rcClient.right);
SIZE szBorder = { rcScreen.right - rcScreen.left - rcClient.right,
rcScreen.bottom - rcScreen.top - rcClient.bottom };
auto ctl = self(hwndDlg);
MINMAXINFO *pInfo = (MINMAXINFO *)lParam;
POINT Max = ctl->GetMaxDialogSize();
POINT Min = ctl->GetMinDialogSize();
Min.x += szBorder.cx;
Min.y += szBorder.cy;
pInfo->ptMinTrackSize = Min;
pInfo->ptMaxTrackSize = Max;
return 0;
}
SIZE scdialog::GetMinDialogSize()
{
SIZE sz = { 0, 0 };
sz.x = ::SciterGetMinWidth(hwnd);
sz.y = ::SciterGetMinHeight(hwnd, sz.x);
return sz;
}
Так неправильно?
Как тогда? Сохранить результат и не запрашивать его на каждое сообщение?
И как так получается, что константная, по сути, функция влияет на рендер?
| P.S. Ну и в обработчике WM_INITDIALOG есть, но там-то должно быть точно по делу |
| // ...
SIZE sz;
sz.cx = ::SciterGetMinWidth(hwndDlg);
sz.cy = ::SciterGetMinHeight(hwndDlg, sz.cx);
RECT rc; rc.left = ctl->position.x;
rc.top = ctl->position.y;
rc.right = rc.left + sz.cx;
rc.bottom = rc.top + sz.cy;
::AdjustWindowRectEx(&rc,
static_cast<DWORD>(GetWindowLongPtr(hwndDlg, GWL_STYLE)), FALSE,
static_cast<DWORD>(GetWindowLongPtr(hwndDlg, GWL_EXSTYLE)));
// ...
|
| |
P.P.S. Вопрос по инспектору — он совсем не умеет показывать
markup для контента, загруженного через
SciterLoadHtml? Или можно как-то?
Так получается, что всё показывает — DOM, внешние css, картинки и пр., а саму страницу нет.