Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 184

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 178 179 180 181 182 183 < 184 > 185 186 187 188 189 190 .. 320 >> Следующая

public class гйіпгСГ!Л : !
// Наш PictureBox будет содержать изображение улыбающейся рожицы private PictureBox happyBox:
public Mai nFor-mn
Перетаскивание, проверка попадания в область., занимаемую изображением 453
(
// Настраиваем параметры объекта PictureBox happyBox - new PIctureBoxQ ;
happyBox.SizeMode = PictureBoxSizeMode.Stretch Image; happyBox.Location = new System.Drawing,Point(64, 32); happyBox.Size = new System.Drawing.Size(50. 50); happyBox.Cursor - Cursors.Hand;
= new Bitmaof"happy bmp"):
II Добавляем объект PictureBox в коллекцию Controls формы: Contro1s. Add (happyBox):
}
}
Единственное свойство PictureBox, которое может вызвать какие-либо вопросы — это свойство SizeMode, для которого используются значения из перечисления PictureBoxSizeMode. Это свойство позволяет определить, как именно будет выводиться изображение внутри PictureBox. В нашем случае было использовано значение Stretch Image, которое означает, что изображение должно быть сжато или растянуто таким образом, чтобы полностью соответствовать размерам P1ctureBo>. Другие возможные значения представлены в табл. 9.26.
9.26. Значения перечисления PictureBoxSizeMode Значение Описание
AutoStee Значения PictureBox будут изменены таким образом, чтобы полностью соответствовать размерам изображения
Centerimage Если размеры PictureBox будут больше, чем размеры изображения, изображение
будет позиционировано точно по центру PictureBox, Если же размеры изображения будут превышать размеры PictureBox, то выступающие края будут обрезаны
Normal Изображение будет расположено в верхнем левом углу PictureBox. Если раэмеоы
изображения превысят размеры PictureBox, выступающие края будут обрезаны
После того как мы создали PictureBox и настроили его свойства, следующая наш; задача - обеспечить обработчики для событий MouseMove, MouseUp и MouseDown. Поскольку Pi cture?ox - это класс, производный от Control, работа с этими событиями производится точно так же, как и в случае других элементов управления:
// Добавляє» обработчики для следующих событий happyBox.MouseDown +- new MouseEventHandler(happyBox_MouseDown); happyBox.MouseUp +- new MouseEventHandler(happyBoxJtousellp); happyBox. MouseMove += new MouseEventHandlerChappyBox MouseMove);
В обработчике события MouseDown, во-первых, устанавливается значение true для переменной isDragging (это будет означать, что началась операция перетаскивания), а во-вторых, фиксируются координаты указателя мыши при наступлении
этого события:
// Обработчик события MouseDown для объекта PictureBox
private void happyBox MouseDowi(obJect sender. МоиseEventArgs e)
{
isDragging - true;
і
454 Глава 9 • Графика лучше (GDI+)
// Сохраняем координаты (х. у) для исходного положения указателя мыши. // Они понадобятся нам для расчета смещения PictureBox oldX = е.Х; OldY = e.Y:
}
Обработчик события MouseMove обеспечивает перемещение PictureBox по форме (изменяя значения свойств Тор и Left). Для расчета нового положения PictureBox используется смещение указателя мыши относительно исходной позиции:
// Если пользователь производит щелчок на изображении и, не отпуская кнопку, перемещает /7 мышь, PictureBox вместе с изображением будет перерисовываться в новом месте private void happyBox_MouseMove(object sender. MouseEventArgs e) I
if(isDragging)
{
// Определяем новое значение координаты Y для PictureBox по разности меаду // старым и новым положением указателя мыши happyBox.Top = happyBox.Top + (e.Y - oldY);
II To же саное для координаты X happyBox.Left = happyBox.Left + (е.Х - oldX);
}
}
Далее обработчик события MouseUp должен установить значение переменной isDragging равным false — это будет индикатор окончания операции перетаскивания. Кроме того, по условиям задачи должна производиться проверка: если перемещаемый PictureBox отпущен внутри определенной области формы (ограниченной размерами объекта Rectangle - прямоугольника), то будем считать, что пользователь добился успеха. Таким образом, весь оставшийся необходимый код выглядит следующим образом:
// Когда пользователь отпустит кнопку мыши, операция перетаскивания завершится. // Проверяем, не оказалосв ли при этом перетаскиваемое изображение внутри заданного // прямоугольника:
private void happyBox_Mouseup(object sender. MouseEventArgs e) {
isDragging = false;
Il Находится ли указатель мыши внутри "прямоугольника сбрасывания" - dropRect? і f(dropRect.Conta і ns(happyBox.Bounds))
{
MessageBox.Show("You win!". "What an amazing test of skill...");
}
I
Il Будем считать, что на форме уже выведен пряноугольник следующих размероа:
// Rectangle dropRect 11 - new RectangleuOO. 100. 150. 150);
II
private void MainForm Pa int(object sender, PaintEventArgs e)
{
// Выводим "прямоугольник сбрасывания"
Graphics g - e.Graphics:
g.FillRectangle(Brushes.AntiqueWhite. dropRect); // Инструкции пользователю
g.DrawStringC'Drag the happy guy in here.new FontCTimes New Roman". 25).
Brushes.Red, dropRect):
]
Перетаскивание, проверка попадания в область, занимаемую изображением 455
Предыдущая << 1 .. 178 179 180 181 182 183 < 184 > 185 186 187 188 189 190 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100