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

 



相關文章
相關標籤/搜索