使用DirectUI需要directuiCom.dll,包含IDirectUI.h和DirectuiDef.h。在你的应用程序中初始化CLSID_DirectUI,并获取IDirectUI(IID_IDirectUI)接口。具体初始化方式可以参考官网示例。DirectUI的界面定义分为xml + script。xml定义界面的布局、样式、资源。script文件定义相关消息的映射处理,并通过Window.OnSkinCmd转发相应的消息到指定的函数。假设这里你使用的技术是ATL,DirectUI定义了WM_SKIN_COMMAND消息,你可以添加对应的MESSAGE_HANDLER:
MESSAGE_HANDLER(WM_SKIN_COMMAND, OnSkinCommand)
在OnSkinCommand的时候转发由script中通过OnSkinCmd发送的消息:
1 LRESULT OnSkinCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { 2 SendMessage(WM_COMMAND, wParam, lParam); 3 4 return 0; 5 }
假设在你对应的xml中有一个button按钮,在script中添加了对应的处理函数:
1 function btnClick::onClick(cx, cy) { 2 Window.OnSkinCmd(100, 0); 3 }
在你的任意头文件中定义btnClick的标识,比如:
#define IDC_BTNCLICK 100
在消息映射中添加一个COMMAND_ID_HANDLER:
COMMAND_ID_HANDLER(IDC_BTNCLICK, OnBtnClickClick)
这样你原来基于ATL编写的消息处理器依然可以被继续使用,而UI的技术就可以尝试使用DirectUI。