MFC+DuiLib的学习及总结

学习及总结
==============================================================================
2021 12 05 在使用控件时,要注意 名字可加入数据编号 同时注意大小写,是区分的,
控件的Name 这样会报错

<ProgressCircle name="cprogress01" /> ===OK
<ProgressCircle name="cprogressA" /> ===NG
m_pCircleProgress01 = static_cast<CProgressCircleUI*>(m_PaintManager.FindControl(_T("CProgress01"))); //NG
==============================================================================
2021 09 05 在使用TileLayout 控件时,要注意,
要想实现 多功能的应用,就创建一个子XML ,然后再调用这个文件
请参考 ListCtrl 和 TileLayou 扩展控件的应用及使用


==============================================================================
2021 08 05 多字节ASCII 与 宽字节 Unicode

如果使用Unicode 时, 所有读到到数据都转成Wchar_t
如果是ASCII 就要转换一下!

==============================================================================
2021 08 05 Menu 点击时,会失去焦点,
在Duilib 用使用相关的Menu功能 时,如果在失去焦点时不能触发到,按键时,
就会先关闭,当前的窗体! 所以应先屏蔽一下,调用相在的信息后,才可以关闭!

LRESULT CMenuWndEx::OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
//Close();
//bHandled = FALSE;
return 0;
}

使用 Duilib的消息处理机制 CMenuWndEx::Notify(TNotifyUI& msg)

==============================================================================
2021 08 05 SetTimer 定时与Ring 会冲突

在使用应注意,如果要想使用SetTimer ,在当前的实例窗体内不要用 Ring这个控件

会导致解发定时功能一直
==============================================================================
2021 07 02 使得HTML 相关的功能实现图片动态

所使用到控件在具有 html 功能
m_pLoadLabel->SetShowHtml(true);
str.Format(_T("{i load\\load.png 10 %d }{/i}"), loadrate);
m_pLoadLabel->SetText(str);
loadrate++;
==============================================================================
2021 05 04 VS提示内存泄漏(Detected memory leaks)的解决方法

1 ) 在MFC中,常规-->MFC使用 【如果在共享 DLL 中使用 MFC】 因为MFC动态加载时,需要更多的内存空间
Detected memory leaks!
Dumping objects ->
{60644} normal block at 0x074D1618, 332 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2 )请使用 【在静态库中使用 MFC】

==============================================================================
2021 02 08 创建自定义控件及控件类

1)写对应的头文件和源文件
2)在头文件中最先应该重写的两个函数是GetClass和GetInterface!
3)在头文件的总文件中增加如下内容

class CDialogBuilderCallbackEx : public IDialogBuilderCallback
{
public:
CControlUI* CreateControl(LPCTSTR pstrClass)
{
if (_tcsicmp(pstrClass, _T("CtrlList")) == 0) return new CCtrlListUI;
else if (_tcsicmp(pstrClass, _T("ListCtrl")) == 0) return new CListCtrlUI;
else if (_tcsicmp(pstrClass, _T("ListBox")) == 0) return new CListBoxUI;
else if (_tcsicmp(pstrClass, _T("CircleProgress")) == 0) return new CCircleProgressUI;
else if (_tcsicmp(pstrClass, _T("SkinPikerPictureItem")) == 0) return new CSkinPikerPictureItemUI;
return NULL;
}
};

==============================================================================
2021 02 03 使用Container 可以将控件放到另一个控件之上,或下!
在使用Treelist 控件时,要注意属性的设置,有些设置要参考《Duilib属性列表》 及滚动条的设置

<TreeView name="TestInfolist" padding="4,0,2,0" itemtextcolor="#FFC8C6CB" itemhottextcolor="#FFC8C6CB" selitemtextcolor="#FFC8C6CB" itemhotbkcolor="#FF1B1B1B" itemselectedbkcolor="#FF151C2C" vscrollbar="true" >

<!--第一列-->
<TreeNode text=" 工单信息" height="33" bkimage="file='table01\gameicons.png' source='0,0,19,20' dest='25,6,45,26'" nativebkcolor="#FF0E0E0E"
folderattr="normalimage=&quot;file='table01\tree_unfold.png' dest='0,6,45,26' &quot; selectedimage=&quot;file='table01\tree_fold.png' dest='0,6,45,26' &quot;">

<TreeNode name="PONumer" text="工单批号:" height="43" textcolor="#FF386382" font="13" textpadding=" 10,10,10,12" style="dut_style"/>
<TreeNode name="POSum" text="工单数据:" height="43" textcolor="#FF386382" font="13" textpadding=" 10,10,10,12" style="dut_style"/>
<TreeNode name="POCountry" text="出货国家:" height="43" textcolor="#FF386382" font="13" textpadding=" 10,10,10,12" style="dut_style"/>
<TreeNode name="PODate" text="出货时间:" height="43" textcolor="#FF386382" font="13" textpadding=" 10,10,10,12" style="dut_style"/>
</TreeNode>
</TreeView>

==============================================================================
2021 01 20 使用Container 可以将控件放到另一个控件之上,或下!
<HorizontalLayout >
<Control />
<Container width="300" height="300">
<CircleProgress name="circle_progress" textcolor="#FF333333" width="300" height="300" bkcolor="#FFFFFF33" forecolor="#FFFF0000" value="50" min="0" max="100"/>
<Ring name="ring" text="Testing" textcolor="#FFAA33DD" width="100" height="100" align="center" bkimage="table05/ring.png"/>
</Container>
<Control />
</HorizontalLayout>
==============================================================================
2021 01 12 使用Style时要注意 value的值内部的双引号用&quot; 用于替代,
不可以使用单引号'来处理value的值 !请注意

<Source name="Style">
<Style name="edit_style" value="textpadding=&quot;6,6,6,6&quot; bkcolor=&quot;#FF666666&quot; bkimage=&quot;res='common/edit_bk.png' corner='6,6,6,6'&quot;" />
<Style name="max_style" value="textpadding='6,6,6,6’ bkcolor='#FF666666' bkimage='res='common/edit_bk.png' corner='6,6,6,6''" />
</Source>
==============================================================================
2021 01 11 窗口不能调整

textpadding="10,40,10,12"

在使用复选,单选按钮时,要用这个属性,textpadding="100,0,0,0" ,给字体设置大的空间

可以调整 text在控件中的位置, 可以放最下,在新的本版在设置文字的方向要用如下属性
valign="vtop"
valign="vcenter"
valign="vbottom"
valign="vleft"
valign="vright"
==============================================================================

2020 12 20 基类内有纯虚函数时,要用指针对象

导致这种现象的主要原因是由于,没有生重新定义对应的纯虚函数
//CNotifyEx m_Notify; //基类内有纯虚函数时,不可以使用普通对象
CNotifyEx *m_pNotify; //必须使用指针,不可能使用类的普通对象

==============================================================================
2020 12 11 窗口不能调整

在使用有子窗口的 XML时,以主窗口的尺寸为主,其它的窗口都不用写,菜单的窗口除外

==============================================================================
2020 11 15 将DuiLib 升级到1.2V

1. 解决ListCtrl可以设置颜色
2. 可以增加Check

在设置字体时采用是 Html的方式,在使用时中只能有一种元素!

eg. m_str.Format(_T("{c #%X}%s{/c}"), dwcolor, str); //对应动态设置字体颜色时,只能有一个Html元素

==============================================================================
2020 10 05 将之前MFC 切换到DuiLib V1.1
==============================================================================
1. 解决不能自动调整尺寸
2. UI呆板
3. 无法换肤色
4. 动图不易实现

================================================================================

 

posted @ 2021-12-05 23:51  FAiBG  阅读(704)  评论(0)    收藏  举报