MFC與duilib之間控制項相互呼叫

2021-08-02 02:56:28 字數 1767 閱讀 7701

一、在mfc中使用duilib控制項

將duilib的控制項視窗的父視窗指定為mfc的視窗,同時在mfc中顯示duilib的控制項視窗。

duilib的控制項視窗需要繼承cwindowwnd, inotifyui,實現getwindowclassname、getclassstyle、onfinalmessage、notify、handlemessage等方法。

在mfc中以子視窗樣式顯示duilib的控制項視窗。比如:

m_duiframewnd.create(*this, null, ui_wndstyle_child, 0, 0, 0, 400, 300);  

m_duiframewnd.showwindow(true); 

如何響應duilib控制項事件,需要處理notify函式。比如:

//m_pdlgmain是mfc主視窗的指標。

void cduiframewnd::notify( tnotifyui& msg )

else if( msg.psender->getname() == _t("btnstop") ) }}

__super::notify(msg);

}

二、在duilib中使用mfc控制項

自定義乙個duilib控制項來容納mfc控制項,xml布局介面檔案中使用該控制項,使用非duilib控制項來標記,比如:mymfcwnd,非duilib控制項需要自己在響應createcontrol建立,建立該控制項時之後將mfc控制項控制代碼繫結在一起(通過attach)。

ccontrolui* cduiframewnd::createcontrol(lpctstr pstrclassname)

else if (_tcsicmp(pstrclassname, _t("mymfcwnd")) == 0)

return null;

}

//cmfcwndui自定義mfc控制項 

#pragma once

//自定義乙個duilib控制項來容納mfc控制項

class cmfcwndui : public ccontrolui

; ~cmfcwndui(void){};

virtual void setinternvisible(bool bvisible = true)

virtual void setpos(rect rc)

bool attach(hwnd hwndnew)

m_hwnd = hwndnew;

return true;

} hwnd detach()

protected:

hwnd m_hwnd;

};

duilib中mfc控制項的響應

win32是通過wm_command進行訊息傳遞的,我們只需截獲wm_command,而duilib的wm_command等windows訊息可以在handlemessage函式裡截獲,比如:

完整例項**:

duilib中使用MFC控制項

這裡示例將mfc按鈕放到duilib滑塊條控制項的位置 1 準備好乙個duilib控制項來容納mfc控制項,如下 將帶控制代碼hwnd的控制項顯示到ccontrolui上面 class cwndui public ccontrolui virtual void setinternvisible bo...

MFC繫結控制項與變數

在新增控制項後,會有乙個資源id,類似idc edit output等的標識,如果想要將它們與乙個記憶體中的變數相掛勾,可以在窗體方法 dodataexchange 中新增,如要將乙個text控制項與變數m edit掛勾,則可以使用 ddx text pdx,idc edit output,m ed...

MFC中控制項與變數關聯

getdlgitem idc edit1 setwindowtext 變數 getdlgitem idc edit1 getwindowtext 變數 getdlgitem idc edit1 setwindowtext 陣列名,長度 分繫結value和繫結control兩種 projectdlg....