{A}指数{A4}{A5}{A6}{A7}{A8}{A9}{A10}{S0}{A11}
良好的用户界面是一个良好的应用,除了其他标准,如性能,稳定性/可靠性的重要组成部分... ...就个人而言,我真的很喜欢很久以前在CodeProject上公布的以下库。{A12}丹尼尔宝云{A13}由Sergey克里莫夫{A14}由Igor Katrayev
这些上市图书馆都写在WTL。但它真的很难混合MFC放大器; WTL的一起。显然,它的不合理的来问一个开发者或团队给予最多的MFC和移动WTL的世界只是因为有一些很大的控制或视觉框架写在WTL(有,应该是特别是在一家公司认为有数百很多东西像我工作的公司开发)。不幸的是,到现在为止没有这样好的免费在MFC中的视觉框架。有任何困难,我仍然渴望能够使用他们,现在我的努力是在这里与您共享。{A15}技术决策
有两种可能的方法:移植到MFC的WTL的源代码完全:这种方法有一些问题。首先,它会带我很多的时间(只是重新写的是什么人做过)。二,错误修复和加强从原来的作者不会是最新的。第三,我再次到端口,另一个很好的WTL的针对性库,如果有一天公布。因着这样的原因,我决定不遵循这个方向。MFC放大器; WTL的混合在一起。我知道有很多问题,在论坛的文章{A16}所示这种方法。由于我没有野心,有一个通用的方式来整合所有的WTL的针对性库(现在和将来),但上述这些只是,我相信这是可能的。它是如何工作?
下面是MFC包装的核心:template<class TMFCWnd, class TWTLCWindow>
class ATL_NO_VTABLE CWTL4MFCWndT : public TMFCWnd
{
public:
typedef TWTLCWindow WTLClass;
WTLClass m_wndWTLPeer;
virtual void PreSubclassWindow()
{
m_wndWTLPeer.m_hWnd = m_hWnd;
__super::PreSubclassWindow();
}
virtual LRESULT WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = 0;
if(FALSE == m_wndWTLPeer.ProcessWindowMessage
(m_hWnd, nMsg, wParam, lParam, lResult))
{
ASSERT(::IsWindow(m_hWnd));
lResult = TMFCWnd::WindowProc(nMsg, wParam, lParam);
}
return lResult;
}
__if_exists(TWTLCWindow::PreTranslateMessage) {
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
BOOL blRes1 = __super::PreTranslateMessage(pMsg);
BOOL blRes2 = m_wndWTLPeer.PreTranslateMessage(pMsg);
// if both WTL & MFC handle this message
// there maybe a problem, consider to override
// this method in derived class
ASSERT(FALSE == (blRes2 && blRes1));
return (blRes1 | blRes2);
}}
};
不多说,每个窗口消息(WM_xxx),如果不处理相应的WTL的同行,MFC包装。潜在的问题
问题时,会出现一个窗口消息(WM_xxx)WTL的同行(从ProcessWindowMessage返回TRUE),但该消息也为MFC框架的重要处理。要解决这个问题,我会选择一个非常简单的方法:做测试和情况下,解决方法的情况下。{A17}
应用到现有的MFC项目库是很容易的,让我们来看看你的出发点示范项目。下面是类图的快速参考。{A18}Visual Studio 2003中Visual Studio 2005中 - 由于在这个版本的编译器一些变化,让{A19} 200或更高的价值,以避免错误C3859{A20}基本上,错误或要求更多的功能,可能属于这个MFC包装(1)或WTL的原代码(2)或(3)。我会尝试修复错误,属于类(1)和(3),并提出其他的通讯作者(我会尽量不触及尽可能WTL代码,除非它真的有必要与原作者同意,当然)由于这只是一个包装库,请记住从其他作者的更新和{A21}太{A22}
我想感谢他们出色的WTL的针对性库{A23}。也感谢他们的同意,让我在这篇文章中重新分配他们的源代码(稍加修改)。{A24}2007年10月12日:初始版本