Я пытаюсь создать всплывающее окно предварительного просмотра изображений, как в 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();
};
это помогло, но не полностью. Поскольку изображение появляется не под курсором мыши, а рядом с ним (как на картинке моего вопроса), всплывающее окно не может поймать движения мыши. Я пытался отследить движения мыши в главном диалоговом окне, но это не удалось, потому что всплывающее окно сфокусировано на фокусе.
Моя цель - закрыть всплывающее окно после любого движения мыши.