今天了解到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中,刪除了此函數,所以此處會出現編譯錯誤,可直接注釋掉,但是有什么后果我還不清楚。