duilib进阶教程 -- 在MFC中使用duilib (1)

  因为入门教程的反响还不错,所以Alberl就以直播的形式来写《进阶教程》啦,本教程的前提:html

  一、请先阅读《仿迅雷播放器教程windows

  二、要有必定的duilib基础,若是还没,请先阅读《2013 duilib入门简明教程》。函数

  三、下载基于VLC的MFC播放器(包含VLC等全部文件),csdn不容许上传类似的代码,所以后面的教程将再也不上传VLC的dll、头文件等没有改变的文件。ui

  《仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)》中界面是用MFC作的,所以咱们要将它换成duilib。而在《2013 duilib入门简明教程 -- 结合win32和MFC (16)》中只讲了怎么在duilib中显示MFC窗口,以及在MFC中显示duilib窗口,可是没有讲消息的响应,所以有些基础薄弱的小伙伴仍是不懂,这里借着这个机会讲解一下消息的响应,下面进入正题。spa

  以前的MFC界面以下: .net

 

  如今咱们将左边的三个按钮换成迅雷的,以下:指针

 

  其中左边那块是纯duilib的界面,右边那块是在duilib的窗口里放了一个win32控件,这六个按钮都是有消息响应的,所以本教程实现了如下功能:code

  一、在MFC窗口显示了duilib窗口,并响应了duilib的控件。htm

  二、在duilib的窗口显示了win32的控件,并响应了win32的控件。blog

  因此与MFC结合的知识已经全面覆盖了(与win32结合也是相似的),到此,就不用担忧老项目使用duilib带来问题了。

  界面显示已经在《2013 duilib入门简明教程 -- 结合win32和MFC (16)》讲过了,那么这里只讲消息响应。

 

1、纯duilib控件的响应:

  只需在Notify函数作响应就好了,其中m_pDlgMain是MFC主窗口的指针。

void CDuiFrameWnd::Notify( TNotifyUI& msg )
{
    if (m_pDlgMain)
    {
        if( msg.sType == _T("click") ) 
        {
            if( msg.pSender->GetName() == _T("btnPrevious") ) 
            {
                m_pDlgMain->OnBnClickedButtonPlayPrevious();
            }
            else if( msg.pSender->GetName() == _T("btnNext") ) 
            {
                m_pDlgMain->OnBnClickedButtonPlayNext();
            }
            else if( msg.pSender->GetName() == _T("btnPlay") ) 
            {
                m_pDlgMain->OnBnClickedButtonPlay();
            }
        }
    }

    __super::Notify(msg);
}

  可见原有的MFC代码基本无需改动,是否是很简单呢~O(∩_∩)O~

 

2、duilib中MFC控件的响应

  因为duilib不够成熟,不少东西都要本身去处理,而若是水平不够的话,就极可能作不出来,已经有不少网友由于有些控件很难实现而放弃了。所以这种状况下,若是某个控件很难实现,咱们用MFC的控件代替就是很是适合的,而且不少控件即便duilib能作出来,也仍是取代不了MFC控件,好比虚拟表格等等,这些MFC控件已经很成熟了,而且界面也不难看,可自行定制,而若是用duilib去作虚拟表格的话,工做量确定是很大的,所以这种状况下,也建议用MFC控件。那么在duilib中显示的MFC控件怎么响应呢?

  其实也很简单,回到win32就好了,咱们只需截获WM_COMMAND,而duilib的WM_COMMAND等windows消息能够在HandleMessage函数里截获,代码以下:

LRESULT CDuiFrameWnd::HandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch (uMsg)
    {
    case WM_COMMAND:
        if (IDC_BUTTON_DUI_NEXT == wParam)
        {
            if (m_pDlgMain)
            {
                m_pDlgMain->OnBnClickedButtonPlayNext();
            }
        }
        break;
    default:
        break;
    }

    return __super::HandleMessage(uMsg, wParam, lParam);
}

  也是很是简单!

  如今已经能够去试试效果啦,左边那三个按钮和右边那三个按钮的效果彻底同样!

  从这个例子能够看出,不管是在duilib里使用MFC,仍是在MFC中使用duilib,都不须要改动原有项目,和MFC结合是否是颇有用呢~O(∩_∩)O~

  代码下载:http://download.csdn.net/detail/qq316293804/6426325

 



相关文章
相关标签/搜索