introduction
習慣使用fmt庫做字符串的格式化操作。盡管nim_duilib提供了類似的函數。
故項目demo_xml引入了外部庫fmt
framework.h中添加下面的以便使用fmt庫
#include "fmt/format.h"
Note
stage1
相對之前的代碼,這次重新調整了庫的目錄結構。現如下:
.
├─Debug # VS默認輸出
├─demo_xml # 主目錄
└─ext # 存放擴展庫
├─third_party # 存放第三庫
│ ├─duilib ## duilib庫
│ ├─fmt ## fmt庫,字符串格式化庫,
│ └─jsoncpp ## json庫
└─tool_kits # 待定
stage 2
同時,demo_xml移除了對先前頭文件搜索路徑的設定,改為當前目錄結構下設置指定頭文件目錄。
stage 3
fmt庫,已經設定好了,我用cmake+VS2017生成了對應的工程文件,這樣就可以在demo_xml項目中引用fmt庫了。
當然,你也可以編譯動態庫或者靜態庫,再由demo_xml項目調用靜態庫或者靜態庫。
stage 4
xml文件中新增了一個控件richedit用於顯示窗口上的其他控件的名字,比如,按鈕單擊,richedit顯示按鈕的在xml配置的name或者代碼中設置的name;ListBox的item雙擊,richedit顯示item設置的name。 具體的,參考代碼。 效果圖如下:
stage 5
ListBox和Tree控件的item都設置了監聽,例如,ListBox的Item的監聽雙擊代碼如下:
ui::ListContainerElement* pelement = new(std::nothrow) ui::ListContainerElement;
if (pelement)
{
// 設置item顯示的內容
std::wstring str_item = fmt::format(L"{}", i);
pelement->SetText(str_item);
pelement->SetName(str_item);
// 設置item的樣式,可以在global.xml中找到
pelement->SetClass(L"listitem");
pelement->SetFixedHeight(20);
plist_->Add(pelement);
// 監聽雙擊
pelement->AttachDoubleClick(nbase::Bind(&BasicForm::OnListBoxItemDbClicked, this, std::placeholders::_1));
}
其中,函數OnListBoxItemDbClicked的原型如下:
// 監聽listbox的item的雙擊
bool OnListBoxItemDbClicked(ui::EventArgs* msg);
OnListBoxItemDbClicked函數體如下:
bool BasicForm::OnListBoxItemDbClicked(ui::EventArgs* msg)
{
if (msg && prichedit_show_)
{
std::wstring str = msg->pSender->GetName();
prichedit_show_->SetText(str);
}
return false;
}
stage 6
工程文件體積較大,因為cef相關的文件體積較大。
可以使用light_weiht.bat文件為項目瘦身。Note: 注意避免刪除必要項目,可自行修改。 其代碼如下:
del /s *.vc.db
del /s *.tlog
del /s *.log
del /s *.idb
del /s *.pdb
del /s *.lastbuildstate
del /s *.ilk
del /s *.exp
del /s *.obj
del /s *.iobj
del /s *.ipch
del /s *.tlh
del /s *.obj.enc
del /s *.tli
del /s *.exp
del /s *.pch
rd /s /q %cd%\.vs
del /s %cd%\Debug\*.lib
del /s %cd%\Release\*.lib
stage 7
截至目前,關於nim_duilib庫的使用全部代碼,可以在 這里 下載。
我使用的環境:win10 1909 + VS2017