duilib進階教程 -- 在MFC中使用duilib (1)


  由於入門教程的反響還不錯,因此Alberl就以直播的形式來寫《進階教程》啦,本教程的前提:

  1、請先閱讀《仿迅雷播放器教程

  2、要有一定的duilib基礎,如果還沒,請先閱讀《2013 duilib入門簡明教程》。

  3、下載基於VLC的MFC播放器(包含VLC等所有文件),csdn不允許上傳相似的代碼,因此后面的教程將不再上傳VLC的dll、頭文件等沒有改變的文件。

  《仿迅雷播放器教程 -- 基於VLC的MFC播放器 (6)》中界面是用MFC做的,因此我們要將它換成duilib。而在《2013 duilib入門簡明教程 -- 結合win32和MFC (16)》中只講了怎么在duilib中顯示MFC窗口,以及在MFC中顯示duilib窗口,但是沒有講消息的響應,因此有些基礎薄弱的小伙伴還是不懂,這里借着這個機會講解一下消息的響應,下面進入正題。

  之前的MFC界面如下: 

 

  現在我們將左邊的三個按鈕換成迅雷的,如下:

 

  其中左邊那塊是純duilib的界面,右邊那塊是在duilib的窗口里放了一個win32控件,這六個按鈕都是有消息響應的,因此本教程實現了以下功能:

  1、在MFC窗口顯示了duilib窗口,並響應了duilib的控件。

  2、在duilib的窗口顯示了win32的控件,並響應了win32的控件。

  所以與MFC結合的知識已經全面覆蓋了(與win32結合也是類似的),到此,就不用擔心老項目使用duilib帶來問題了。

  界面顯示已經在《2013 duilib入門簡明教程 -- 結合win32和MFC (16)》講過了,那么這里只講消息響應。

 

一、純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~

 

二、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

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM