Я создаю GC на дисплее, а затем делаю некоторые рисунки. У меня вопрос, как мне отрисовать?
Код выглядит так:
final GC gc = new GC(display);
gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
gc.setLineWidth(5);
gc.drawRectangle(rectangle);
gc.dispose();
Контекст:
Мне нужно разрешить пользователям выбирать окно из других приложений. Ожидаемое поведение можно увидеть здесь: http://tools.tortoisesvn.net/SendMessage.html Вместо этого Весь мой экран заполнен красными прямоугольниками.
Это нормально для меня, даже если это решение только для Windows.
РЕДАКТИРОВАТЬ: извините, красный мусор остается даже после закрытия моего приложения.
EDIT2: рабочий пример:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.addListener(SWT.MouseMove, new Listener() {
@Override
public void handleEvent(Event event) {
final Point displayPoint = display.map(shell, null, event.x, event.y);
final POINT point = new POINT();
point.x = displayPoint.x;
point.y = displayPoint.y;
final int windowHandle = OS.WindowFromPoint(point);
if (windowHandle != 0 && windowHandle != shell.handle) {
RECT rect = new RECT();
if (OS.GetWindowRect(windowHandle, rect)) {
Rectangle rectangle = new Rectangle(rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top);
final GC gc = new GC(display);
gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
gc.setLineWidth(5);
gc.drawRectangle(rectangle);
gc.dispose();
}
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Чтобы использовать его, начните перетаскивание мышью из оболочки (не строки заголовка) и наведите его на приложение, которое использует реальные элементы управления Windows (не Swing, QT, XUL). Хорошим примером целевого приложения является Total Commander. Вы увидите, что экран наполняется красными прямоугольниками. В идеале мне бы хотелось, чтобы был виден только один красный прямоугольник.
Я знаю, что мог бы создать новую оболочку с областями, которые будут имитировать красный прямоугольник, но если мышь перепрыгнет через это, я застряну.