Я пытаюсь сделать всплывающее окно предварительного просмотра изображения, как это сделано в Autodesk Revit Architecture:
Поведение всплывающего изображения:
- Когда мышь останавливается на 500 миллисекунд над усеченным изображением, рядом с курсором мыши появляется полноразмерное всплывающее изображение.
- Всплывающее изображение не является модальным диалогом, поэтому элементы управления главного окна (wxDialog) по-прежнему включены.
- Всплывающее окно исчезает при движении мыши.
Я пытался это сделать, но у меня не получилось. Сначала я помещаю wxStaticBitmap
на wxDialog
и использую ShowModal()
, чтобы показать это полноразмерное изображение. Он отлично работает, но поскольку он модальный, главное окно отключается. Я пытался сделать этот диалог не модальным, но когда я пытаюсь это сделать, поднимается главное окно (главное окно модальное) и изображение исчезает.
обновление Теперь мой код:
class PictureFrame: public wxPopupTransientWindow
{
wxStaticBitmap *m_picture;
public:
PictureFrame( wxWindow *parent );
~PictureFrame();
};
Структура кода панели выглядит следующим образом:
class MaterialsPane: public wxPanel
{
PictureFrame* m_popup;
wxTimer* m_timer;
public:
MaterialsPane( wxWindow* parent);
~MaterialsPane();
void OnTimer( wxTimerEvent& event);
void OnMouseMove( wxMouseEvent& event );
....
DECLARE_EVENT_TABLE()
};
Панель размещена в главном модальном диалоге:
class MaterialsFrame: public wxDialog {
MaterialsPane* m_materialsPane;
public:
MaterialsFrame( wxWindow* parent, wxWindowID id = wxID_ANY);
~MaterialsFrame();
};
помогло, но не полностью. Поскольку изображение появляется не под курсором мыши, а рядом с ним (как на картинке моего вопроса), всплывающее окно не может улавливать движения мыши. Я пытался поймать движения мыши в главном диалоге, но это не удалось, потому что фокус перехватывается всплывающим окном.
Моя цель - закрыть всплывающее окно после любого движения мыши.