我的YUV播放器MFC小笔记:非模态对话框建立及窗口间传值

来源:互联网 发布:java 类写成api 编辑:程序博客网 时间:2024/05/17 05:17

YUV播放器中,显示界面(主窗口)和设置界面分离,所有参数均在Setting子窗口设置,故需要主窗口和子窗口中实现参数传递。下面是方法。

1、

在主窗口CYUVPlayerDlg类中定义子窗口变量:

CSettingDlg* m_pSettingDlg;

并在初始化时将其置为NULL:

m_pSettingDlg = NULL;

显示子窗口较简单,主要是申请资源,调用Create函数,指定窗口ID即可。代码如下:

void CYUVPlayerDlg::ShowSettingWindow(){    // 非模态对话框    if (m_pSettingDlg == NULL)    {        m_pSettingDlg = new CSettingDlg();        m_pSettingDlg->Create(IDD_DIALOG_SETTING, this);    }    m_pSettingDlg->ShowWindow(SW_SHOW);}

退出或析构函数要释放资源:

    if (m_pSettingDlg != NULL)    {        delete m_pSettingDlg;        m_pSettingDlg = NULL;    }

下面实现参数传递。

在CSettingDlg类中定义主窗口变量并赋值:

CYUVPlayerDlg *m_pParentWnd; // 窗口参数传递

void SetParentWnd(CYUVPlayerDlg* pWnd) {m_pParentWnd = pWnd;}

当子窗口需要主动将参数传给主窗口时,则使用m_pParentWnd访问主窗口函数。如:

void CYUVPlayerDlg::SetParentParameters(int width, int height, int fps, int fmt, BOOL loop){    m_nWidth = width;    m_nHeight = height;    m_nFps = fps;    m_nYuvFormat = fmt;    m_fLoop = loop;    // 恢复原始状态    if (!IsOpen()) return;    ShowOpenedFrame();}

这样,子窗口的值就传到主窗口中了。当主窗口需要拿子窗口数据时,也使用类似的方法。下面是子窗口的函数:

    void SetParametersToParentWnd(int& width, int& height, int& fps, int& fmt, BOOL& loop)    {        width = m_nWidth;        height = m_nHeight;        fps = m_nFps;        fmt = m_nYuvFormat;        loop = m_fLoop;    }

当主窗口需要子窗口参数时,比如在主窗口的初始化时对Setting窗口进行初始化,获取播放参数,代码如下:

// 初始化 设置  对话框    if (m_pSettingDlg == NULL)    {        m_pSettingDlg = new CSettingDlg();        m_pSettingDlg->Create(IDD_DIALOG_SETTING, this);        m_pSettingDlg->SetParentWnd(this);        // 将子窗口的值传递给本窗口        m_pSettingDlg->SetParametersToParentWnd(m_nWidth, m_nHeight, m_nFps, m_nYuvFormat, m_fLoop);    }

李迟 2015.8.15



0 0
原创粉丝点击