我正在尝试制作一个弹出式图像预览窗口,就像在Autodesk Revit Architecture中完成的那样:
弹出图片的行为是:
我试图这样做,但我失败了。
首先,我将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();
};
它帮助但不完全。由于图像不在鼠标光标下但在其附近(如我的问题图片中所示),弹出窗口无法捕捉鼠标移动。我试图在主对话框中捕捉鼠标移动,但失败了,因为弹出窗口会进行焦点。
我的目标是在任何鼠标移动后关闭弹出窗口。
答案 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();
}
要显示此弹出窗口,只需调用构造函数。
您希望传入要显示的图像,将其存储在属性中,通过在客户区域上绘制图像来处理绘制事件。