Изменение размеров средств управления в MFC

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

14
задан Ephemera 5 March 2013 в 05:24
поделиться

6 ответов

Когда Ваш кадр получит сообщение OnSize, он даст Вам новую ширину и высоту - можно просто назвать метод CEdit SetWindowPos, передающий его эти значения.

Предполагают, что CMyPane является Вашей областью разделителя, и он содержит CEdit, который Вы создали в OnCreate, названном m_wndEdit:

void CMyPane::OnSize(UINT nType, int cx, int cy)
{
    m_wndEdit.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
9
ответ дан 1 December 2019 в 08:54
поделиться

Окно получает сообщение WM_SIZE (который обрабатывается обработчиком OnSize в MFC), сразу после того, как это было изменено, таким образом, CEdit:: OnSize не то, что Вы ищете.

необходимо добавить обработчик OnSize в классе кадра и в этом обработчике, как Rob указал , Вы получите ширину и высоту клиентской области Вашего кадра, тогда необходимо добавить код, который корректирует размер и положение управления.

Что-то вроде этого

void MyFrame::OnSize(UINT nType, int w, int h)
{
    // w and h parameters are new width and height of your frame
    // suppose you have member variable CEdit myEdit which you need to resize/move
    myEdit.MoveWindow(w/5, h/5, w/2, h/2);
}
11
ответ дан 1 December 2019 в 08:54
поделиться

GetDlgItem (IDC_your_slidebar)-> SetWindowPos (...)//на самом деле можно переместить, изменить размеры... и т.д.

5
ответ дан 1 December 2019 в 08:54
поделиться

SetWindowPos является небольшим напряженным режимом с этой целью. MoveWindow имеет, что необходимо.

3
ответ дан 1 December 2019 в 08:54
поделиться

Другие указали, что WM_SIZE является сообщением, необходимо обработать и изменить размеры дочерних элементов управления в той точке. WM_SIZE отправляется после того, как изменение размеры закончилось.

Вы могли бы также хотеть обработать сообщение WM_SIZING, которое отправляется, в то время как изменение размеры происходит. Это позволит Вам активно изменить размеры дочерних окон, в то время как пользователь все еще перетаскивает мышь. Не строго необходимый для обработки WM_SIZING, но это может обеспечить лучший пользовательский опыт.

2
ответ дан 1 December 2019 в 08:54
поделиться

Я использую класс CResize от CodeGuru для изменения размеров всех средств управления автоматически. Вы говорите, как Вы хотите, чтобы каждое управление было изменено, и оно делает задание для Вас.

изменять размеры парадигма должна определить, сколько переместит каждая сторона управления, когда диалоговое окно будет изменено.

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

Очень удобный, когда у Вас есть большое количество диалоговых средств управления.

Исходный код

1
ответ дан 1 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: