今天了解到DirectUI开源项目Duilib,感觉不错,就下了一份源代码SVN256,可能是因为我用的是win8 x64和VS2012,编译是出现错误,现在把解决方法记录下来,供大家参考:
1. UIRichedEidt.cpp中CTxtWinHost::Init函数中调用了Riched20.dll中的CreateTextServices函数,但是源工程中是静态链接Riched20.dll,在工程属性->链接器中直接加入Riched20.lib,但是电脑中并没有lib文件,所以需要把静态连接方式改成动态连接方式,即把下面代码做出修改:
if(FAILED(CreateTextServices(NULL, this, &pUnk))) goto err;
上述代码修改为如下代码即可:
HINSTANCE richHandle = NULL; typedef HRESULT (_stdcall *_CTS)( IUnknown *punkOuter, ITextHost *pITextHost, IUnknown **ppUnk) ; _CTS CTS = NULL; richHandle = LoadLibraryW(L"Riched20.dll"); if(richHandle == NULL) exit(0); else { CTS = (_CTS)GetProcAddress(richHandle, "CreateTextServices"); if(NULL == CTS) exit(0); } // Create Text Services component if(FAILED(CTS(NULL, this, &pUnk))) goto err;
FreeLibrary(richHandle);
2. UIDesigner工程中ResourceView.cpp中91行
if (CanAdjustLayout())
在VS2012中,删除了此函数,所以此处会出现编译错误,可直接注释掉,但是有什么后果我还不清楚。