Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Когда Ваш кадр получит сообщение 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);
}
Окно получает сообщение 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);
}
GetDlgItem (IDC_your_slidebar)-> SetWindowPos (...)//на самом деле можно переместить, изменить размеры... и т.д.
SetWindowPos является небольшим напряженным режимом с этой целью. MoveWindow имеет, что необходимо.
Другие указали, что WM_SIZE является сообщением, необходимо обработать и изменить размеры дочерних элементов управления в той точке. WM_SIZE отправляется после того, как изменение размеры закончилось.
Вы могли бы также хотеть обработать сообщение WM_SIZING, которое отправляется, в то время как изменение размеры происходит. Это позволит Вам активно изменить размеры дочерних окон, в то время как пользователь все еще перетаскивает мышь. Не строго необходимый для обработки WM_SIZING, но это может обеспечить лучший пользовательский опыт.
Я использую класс CResize от CodeGuru для изменения размеров всех средств управления автоматически. Вы говорите, как Вы хотите, чтобы каждое управление было изменено, и оно делает задание для Вас.
изменять размеры парадигма должна определить, сколько переместит каждая сторона управления, когда диалоговое окно будет изменено.
SetResize(IDC_EDIT1, 0, 0, 0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0, 1, 1);
Очень удобный, когда у Вас есть большое количество диалоговых средств управления.