如何制作弹出图片? wxWidgets的

时间:2012-03-14 07:50:32

标签: c++ wxwidgets

我正在尝试制作一个弹出式图像预览窗口,就像在Autodesk Revit Architecture中完成的那样:

see how it looks in Revit

弹出图片的行为是:

  1. 当鼠标在截断的图像上停止500毫秒时,鼠标光标附近会出现一个完整大小的弹出图像。
  2. Popup图像不是模态对话框,因此仍然启用主窗口(wxDialog)的控件。
  3. 弹出窗口在鼠标移动时消失。
  4. 我试图这样做,但我失败了。 首先,我将wxStaticBitmap放在wxDialog上并使用ShowModal()来显示此完整尺寸的图片。它工作得很好但是因为它是模态,主窗口变为禁用状态。 我试图让这个对话框不是模态的,但是当我尝试这样做时,主窗口会升起(主窗口是模态的),图像会消失。

    UPD。 现在我的代码:

    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();
    };
    
    它帮助但不完全。由于图像不在鼠标光标下但在其附近(如我的问题图片中所示),弹出窗口无法捕捉鼠标移动。我试图在主对话框中捕捉鼠标移动,但失败了,因为弹出窗口会进行焦点。

    我的目标是在任何鼠标移动后关闭弹出窗口。

1 个答案:

答案 0 :(得分:0)

您应该发布“失败”的代码。当我们没有您正在做的事情的信息时,很难给出具体的建议。

你看过wxPopupWindow吗? http://docs.wxwidgets.org/trunk/classwx_popup_window.html

就个人而言,我发现自己更容易。这就是我现在正在研究的那个看起来如何

cNewDataPopup::cNewDataPopup(  cPatDataset& data )
    : wxDialog(NULL,-1,L"New data",wxPoint(200,200),wxSize(570,242),
        wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP )
    , myData( data )
{ 
    ...
    Show();
}

要显示此弹出窗口,只需调用构造函数。

您希望传入要显示的图像,将其存储在属性中,通过在客户区域上绘制图像来处理绘制事件。