Graph Control Dialog

Version Info

Minimum Origin Version Required: Origin 8 SR0

Need to do before Running Examples

  1. New a c file named "GraphControl Example.c" and save to \OriginC\Originlab folder.
  2. Open Origin, open 2D Gaussian.ogm from \Samples\Matrix Conversion and Gridding folder. Choose menu Plot -> 3D Surface -> Color Map Surface to plot a 3D graph.
  3. Add the above c file to current workspace and compile.
  4. Run "OpenGraphPreviewDlg 0" to open dialog, click "UP" button, source graph changed, but preview on dialog not update. If run "OpenGraphPreviewDlg 1" to open dialog, click "UP" button, source graph and preview both changed.

Example

#include <..\Originlab\DialogEx.h>

void OpenGraphPreviewDlg(bool bRealTimeUpdate = true)
{     
        GraphLayer gl = Project.ActiveLayer();
        if( gl )
        {
                // open preview dialog
                GraphPage gp = gl.GetPage();                
                GraphPreviewDlg dlgEx(gp, bRealTimeUpdate);
                dlgEx.DoModalEx( GetWindow() );
        }
}

class GraphPreviewDlg : public ResizeDialog
{
public:
        GraphPreviewDlg(GraphPage& gp, bool bRealTimeUpdate, int ID = IDD_GETNBOX_PREVIEW);
        ~GraphPreviewDlg();
        
        int DoModalEx(HWND hWndParent);
        
protected:
EVENTS_BEGIN
        ON_INIT(OnInitDialog)
        ON_BN_CLICKED(IDC_PARAMS_MORE, OnBtnClick)
EVENTS_END      
        BOOL OnInitDialog();
        BOOL OnBtnClick(Control ctrl);

private:
        void updatePreview();
        
private:
        GraphPage                       m_gpSource;
        PictureControl          m_pictControl;
        
        bool                               m_bRealTimeUpdate;
};

GraphPreviewDlg::GraphPreviewDlg(GraphPage& gp, bool bRealTimeUpdate, int ID)
:ResizeDialog(ID, "ODlg")
{
        m_gpSource = gp;
        m_bRealTimeUpdate = bRealTimeUpdate;
}

GraphPreviewDlg::~GraphPreviewDlg()
{
}

BOOL GraphPreviewDlg::OnInitDialog()
{     
        ResizeDialog::OnInitDialog();
        
        // to hidden ususeful controls
        vector<int> vnHiddenIDs = {IDC_ERR_MESSAGE_BOX, IDC_PARAMS_DESCRIPTION, IDC_GETN_RESULT_PREVIEW};
        for(int nn = 0; nn < vnHiddenIDs.GetSize(); nn++)
        {
                Control ctrl = GetItem(vnHiddenIDs[nn]);
                if(ctrl)
                        ctrl.Visible = false;    
        }     
        
        Control btn = GetItem(IDC_PARAMS_MORE);
        if( btn )
                btn.Text = "UP";
        
        Control cntrl = GetItem(IDC_PARAMS_PREVIEW);
        if(cntrl)
                m_pictControl.CreateControl(cntrl.GetSafeHwnd());
        
        // this property to no stretch to enable scroll bar
        //m_pictControl.DrawMode = PCDM_NO_STRETCH;
        
    updatePreview();
    
        return true;
}

void GraphPreviewDlg::updatePreview()
{
        PictureHolder phDst;
    m_gpSource.GetPicture(phDst, "EMF", 72, -1, EMBEDGRAPH_HIDE_LEGENDS); 
    m_pictControl.SetPicture(phDst);     
}

BOOL GraphPreviewDlg::OnBtnClick(Control ctrl)
{     
        GraphLayer gl = m_gpSource.Layers(); // active layer
        DataPlot dp = gl.DataPlots(); // active data plot
        Curve crv(dp);
        crv += 1; // add 1 to each y data point, data plotting line will be moved up
        
        if( m_bRealTimeUpdate )
                updatePreview();
        
        return true;
}

int GraphPreviewDlg::DoModalEx(HWND hWndParent)
{
        InitMsgMap();
        
        DWORD dwDlgOptions = 0;
        int nRet = DoModal(hWndParent, dwDlgOptions);
        return nRet;
}