По нажатию левой кнопки сохраняем позиции курсора мыши (x1,y1), пока нажата кнопка мыши (допустим левая) рисуем абстрактный прямоугольник относительно изменения положения курсора(x2,y2) от (x1,y1)-получаем прямоугольник (x1,y1,x2,y2). Проверяем столкновения наших объектов с этим прямоугольником, если столкнулись кладем силку на него куда нибудь(или в динамический массив или можно положить в std::<vector>), кладем аккуратно (чтоб не было копий), по окончанию должна буловская переменная (true если выделили, false если нет ). Ну и в конце получаем размер массива, относительно этого запускаем цикл в котором и будем взаимодействовать с выделенными объектами. Как то так