Дело такое, при обработке сообщения WM_GETMINMAXINFO
и установке значений LPMINMAXINFO
, при первой установке, т.е. при запуске окна, все нормально, но стоит попробовать изменить размер, и переопределить данные передаваемые по ссылке, как окно начинает вести себя не адекватно. Ниже приведу пример, если потребуется весь класс окна приложу и его.
Если быть точнее то при установке максимально допустимого размера ширины/высоты. По данной ссылке можно наглядно посмотреть что происходит с окном
Обработка сообщения WM_GETMINMAXINFO
:
case WM_GETMINMAXINFO:
{
LPMINMAXINFO lp_mmi = reinterpret_cast<LPMINMAXINFO>(lparam);
on_min_max_info(m_min_max_info_);
if (m_min_max_info_.min_width != 0)
{
lp_mmi->ptMinTrackSize.x = m_min_max_info_.min_width;
}
if (m_min_max_info_.min_height != 0)
{
lp_mmi->ptMinTrackSize.y = m_min_max_info_.min_height;
}
if (m_min_max_info_.max_width != 0)
{
lp_mmi->ptMaxTrackSize.x = m_min_max_info_.max_width;
}
if (m_min_max_info_.max_height != 0)
{
lp_mmi->ptMaxTrackSize.y = m_min_max_info_.max_height;
}
}
break;
Сам метод on_min_max_info
это чисто виртуальная ф-ция.
virtual void on_min_max_info(window_min_max_data_t& min_max_data) = 0;
Структура:
struct window_min_max_data
{
int min_width = 0;
int min_height = 0;
int max_width = 0;
int max_height = 0;
void* window_ptr = nullptr;
} typedef window_min_max_data_t;
Далее даю определение виртуальной ф-ции в дочернем классе.
void window::on_min_max_info(window_min_max_data_t& min_max_data)
{
set_min_max_info(min_max_data, 0, 0, 640, 480, true);
}
Метод set_min_max_info
:
void window::set_min_max_info(window_min_max_data_t& data, int max_w, int max_h, int min_w, int min_h,
const bool adjust_window_rect) const
{
if (adjust_window_rect)
{
RECT r1 = { 0,0,min_w,min_h };
RECT r2 = { 0,0,max_w, max_h };
AdjustWindowRect(&r1, WS_OVERLAPPEDWINDOW, false);
AdjustWindowRect(&r2, WS_OVERLAPPEDWINDOW, false);
min_w = r1.right - r1.left;
min_h = r1.bottom - r1.top;
max_w = r2.right - r2.left;
max_h = r2.bottom - r2.top;
}
memcpy_s(&data.min_width, sizeof data.min_width, &min_w, sizeof min_w);
memcpy_s(&data.min_height, sizeof data.min_height, &min_h, sizeof min_h);
memcpy_s(&data.max_width, sizeof data.max_width, &max_w, sizeof max_w);
memcpy_s(&data.max_height, sizeof data.max_height, &max_h, sizeof max_h);
}
При этом, если задать реальное значение максимальной ширины/высоты, то все работает корректно. В чем может быть загвоздка то?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне нужно чтобы юзер нажал на кнопку перешел в галерею выбрал изображения и он вставился в ImageViewНа эмуляторе все окей но при работа на устройстве...
Программа должна подсчитывать кол-во букв, символов и строкДля выхода из цикла есть оператор if, который при вводе пустой строки автоматически...
Какая разница между parallel() and parallelStream()? Что-то ни дока ни инфа в инете пока не помогаютЕсли это важно, то для примера возьмем обычный arraylist c 100 000 элементов