当前位置:首页 > 代码 > 正文

duilib全套源代码(duilib控件)

admin 发布:2022-12-19 16:39 156


今天给各位分享duilib全套源代码的知识,其中也会对duilib控件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何在WTL和MFC中使用duilib及如何静态使用duilib库

不可以

在使用DuiLib的时候,一种是使用他的DLL库(或者lib库)的方式,一种是直接使用源代码。我偏向于使用后者,这样在发布出去的程序中,就会尽量少一些库文件的烦恼。我们下载的DuiLib的源码中,包括测试程序都是使用dll的形式。

使用源代码时,直接把下载的DuiLib里的源码文件添加到自己的工程中:

将红框里的文件夹和文件导入到自己的工程中,如下:

但在编译的时候,会有几个错误:

(1) stb_image.c XUnzio.cpp这两个文件的预编译头问题。取消使用预编译文件即可。

(2) error C2371: “IDispatchEx”: 重定义 问题。

UIFlash.h文件中

#import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids

改为:

#import "..\Utils/Flash11.tlb" raw_interfaces_only, named_guids, rename("IDispatchEx","IMyDispatchEx")

duilib怎么兼容mfc控件

1. VK_TAB无效

2. 如果窗口中内嵌了WebBrowser,浏览器的CTRL+C、V无效,DEL无效

3. 如果窗口中内嵌了WebBrowser,则其他部分的滚动条将失效

由于我对duilib还不熟悉,当碰到这几个问题时,一下子没了主意,只好请教于群内的各路大神,可更多的得到的答复是:为什么要与MFC混用?

我想大家可能更多的是考虑一个项目新建立,能直接使用duilib框架,还用什么MFC,而且MFC似乎本来就不怎么受人待见;但这里我想说的是,对于若干MFC的老项目,想切换UI到duilib上,难道说完全重写过么? 而且我已经做过迁移测试,将MFC项目的UI切换到duilib,可以比较简单的在duilib的UI与旧的MFC窗口的逻辑中间加一层代理转发,这样的工作量还是可以控制的。

扯远了,最终经过多次询问,还是在群里碰到了有相关处理经验的朋友,经过他们的指点,总算对这种兼容处理有了一些思路,下面就将我目前的处理方案贴出来:

1. VK_TAB无效

这个需要在MFC的窗口类中处理 PreTranslateMessage ,将对于VK_TAB的处理强制交给duilib的 CPaintManagerUI::TranslateMessage 来处理

2. 如果窗口中内嵌了WebBrowser,浏览器的CTRL+C、V无效,DEL无效

这个与第一点类似,将给duilib来处理即可

第1与2点代码如下:

BOOL CMFCTestDlg::PreTranslateMessage( MSG* pMsg )

{

if( pMsg-message == WM_KEYDOWN)

{

{

if (pMsg-wParam == VK_ESCAPE || pMsg-wParam == VK_RETURN || pMsg-wParam == VK_TAB || pMsg-wParam == VK_DELETE)

{

if(m_dlgWnd.TranslateMessage(pMsg))

return TRUE;

}

else if (pMsg-wParam == 'C' || pMsg-wParam == 'V')

{

if( (GetKeyState(VK_CONTROL) 0x8000))

{

m_dlgWnd.TranslateMessage(pMsg);

}

}

}

}

return CDialog::PreTranslateMessage(pMsg);

//TranslateMessage方法仅是转而调用CPaintManagerUI::TranslateMessage

bool MainFrame::TranslateMessage( MSG* pMsg )

{

return m_PaintManager.TranslateMessage(pMsg);

}

这里其实根本原因,原理我还没搞清楚,请知道的补充一下。

3. 如果窗口中内嵌了WebBrowser,则其他部分的滚动条将失效

这个问题以前就发现了,但在昨天才发现,如果将内嵌的浏览器拿掉的话,滚动条又正常了,进行了跟踪,发现是由于当窗口中未选中任何的Edit或其他可操作的控件时,默认的焦点是在这个 WebBrowser 上[原因不详],这样鼠标中键滚轮滚动时,WM_MOUSEWHEEL消息会被路由到 LRESULT CActiveXWnd::HandleMessage,而此处对于消息 WM_MOUSEWHEEL是直接丢弃,导致了滚动条消息丢失了,按如下处理可以解决这个问题:

将WM_MOUSEWHEEL消息发给主窗口进行处理:

LRESULT CActiveXWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)

{

LRESULT lRes=0;

BOOL bHandled = TRUE;

switch( uMsg ) {

case WM_PAINT: lRes = OnPaint(uMsg, wParam, lParam, bHandled); break;

case WM_SETFOCUS: lRes = OnSetFocus(uMsg, wParam, lParam, bHandled); break;

case WM_KILLFOCUS: lRes = OnKillFocus(uMsg, wParam, lParam, bHandled); break;

case WM_ERASEBKGND: lRes = OnEraseBkgnd(uMsg, wParam, lParam, bHandled); break;

case WM_MOUSEACTIVATE: lRes = OnMouseActivate(uMsg, wParam, lParam, bHandled); break;

case WM_MOUSEWHEEL:

{

::PostMessage(::GetParent(GetHWND()), uMsg, wParam, lParam);

return 0;

}

break;

default:

bHandled = FALSE;

}

if( !bHandled ) return CWindowWnd::HandleMessage(uMsg, wParam, lParam);

return lRes;

}

按上述处理,目前这几个问题基本得到了处理,我也敢在项目中应用了,但其实这里还是有细节问题的,比如:

1. 按TAB键后,如果没有WebBrowser,则按到最后,TAB就没办法切换有焦点的控件了,一直出现叮叮的系统声音[不可操作]

2. 按TAB键,如果有WebBrowser,则最终焦点进入WebBrowser后,不能切换出来了,只能通过鼠标来调整焦点;另外如果当前窗口没选中任何控件,默认焦点在 WebBrowser 中,按TAB键则直接进入了WebBrowser 中。

3. 另外还有一个问题duilib的问题,我这边暂时简单处理了一下

所有的button类[button,check,option等]均会响应TABSTOP,这个可以在XML文件中通过keyboard属性来设置,但库中的CTreeViewUI中创建节点中会自动添加按钮,这种需要手动将其设置为不响应TABSTOP:

pFolderButton-SetKeyboardEnabled(false);

pDottedLine-SetKeyboardEnabled(false);

pCheckBox-SetKeyboardEnabled(false);

pItemButton-SetKeyboardEnabled(false);

我目前直接将所有按钮的默认接受属性设置成了false,需要的时候针对需要的按钮设置 keyboard属性。

vc6.0下能使用duilib吗 如果能具体怎么配置

可以。你做好环境配置就行了。

首先,你可以在google代码托管上下载到最新的duilib源码,地址是这里 可以看见有2个项目,有一个是duilib的源码,还有一个就是duilib配套的UIdesigner,可以用它进行可视化的UI设计,自动生成xml文件。(但是我的机器上的UIdesigner不知道为什么每次打开xml文件时就完全没有反应,有时候还会发生程序未响应的情况)然后网上随意可以下载到《duilib简单文档》,那个用来作为第一次运行duilib的程序相当不错~

注意:以下全部为Debug版本的配置方法。

首先,你应该知道新建的工程是一个“win32项目”,之后选择一个“空工程”。新建一个cpp文件将《duilib简单文档》中得代码拷贝进去之后,你可以试着去编译一下。提示:“无法打开包括文件:“..\DuiLib\UIlib.h”: No such file or directory”,那么我们就添加UIlib.h。将之前下载的duilib源码中的DuiLib文件夹拷贝至项目文件夹(即cpp文件的上一层目录,与Debug文件夹同级的目录,只不过现在还没有生成Debug文件夹)。现在再来编译一下,已经不报错了!好的。那么试着运行一下,出现一个错误“无法打开文件“..\bin\DuiLib_ud.lib”(也有可能是DuiLib_d.lib等,由预编译决定,没关系),那么我们再去添加。在项目目录下(与Debug文件夹同级),新建一个bin文件夹。将DuiLib_ud.lib等4个lib文件拷贝进去(需要手动生成,不会手动生成的可以下载,在CSDN上搜索“duilib动态链接库及导入库”可以下载到)。之后,再将4个dll文件拷贝进Debug文件夹,再运行。出现一个异常!进行单步调试可以发现,pRoot变量始终是0,因为没有发现xml文件!最后一步,在Debug文件夹中新建一个xml文件,将《duilib简单文档》中的xml例子拷贝进去。运行。现在就已经可以看到窗口了。大功告成。

最后说几个注意点:

1.lib需要放在bin文件夹下,或者通过pragma comment(lib, "..\\bin\\DuiLib_ud.lib")的第二个参数指定路径。

2.dll需要放在Debug文件夹下。

3.xml文件需要放在Debug文件夹下。

4.最重要的是4个dll和4个lib文件,lib文件可以手动生成,不会的也可以去下载。在CSDN上搜索“duilib动态链接库及导入库”可以下载到。下载地址:

duilib全套源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于duilib控件、duilib全套源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/13491.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载