基于DirectUI搭建Windows窗体程序

使用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。

原文地址:https://www.cnblogs.com/junchu25/p/2633468.html