Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Так? Не знаю, на обычных элементах управления должно сработать, если только прорисовка не через свою хрень сделана в VCL. У меня вопрос кстати. В моем приложении требуется изменять высоту главного окна через кнопочку. Собственно простой и расширенный режимы окна сделал. Нижняя граница главного окна должна быть по нижней границе статусной строки. Я вот все хочу как-то оптимальнее код написать, но покане понимаю как корректнее всего подогнать значения. Ведь на висте и семерке это вообще вендекапец какой-то из-за за аеро стиля, пустая облать между нижними границами образуется, потому что высота рассчитывается больше чем ожидалось. Я уж не знаю какие метрики у GetSystemMetrics использовать. Или через одно место какое-нибудь преобразование дочерних координат статусной строки по отношению к главному окну делать может быть. Подскажите как корректно вычислять iHeight при BST_CHECKED. Этот код испоьзуется когда приходит сообщение о смене темы, даже в классическом оформлении высота окна обрубается так что статусная строка наполовину не видна. Код: dwRet := SendMessageW(GetDlgItem(hWnd, IDC_MAIN_WINDOW_MODE), BM_GETCHECK, 0, 0); GetWindowRect(hWnd, rect); iWidth := rect.Right - rect.Left; if (dwRet = BST_CHECKED) then begin GetWindowRect(GetDlgItem(hWnd, IDC_MAIN_STATUSBAR_INFO), rect); MapWindowPoints(0, hWnd, rect, 2); iHeight := rect.Bottom + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CXFRAME) * 2 - 1; end else begin GetWindowRect(GetDlgItem(hWnd, IDC_MAIN_WINDOW_MODE), rect); MapWindowPoints(0, hWnd, rect, 2); iHeight := rect.Bottom + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CXFRAME) * 2 + 5; end; dwRet := SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE; SetWindowPos(hWnd, 0, 0, 0, iWidth, iHeight, dwRet); |
|