vczh-libraries / GacUI

GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.
Other
2.35k stars 297 forks source link

界面刷新问题 #81

Closed bizehao closed 1 year ago

bizehao commented 2 years ago

是整个界面都是整体刷的还是只有自定义控件画布收到任何事件都会刷.

目前我的左边有个列表 右边是自定义控件, 只要我的鼠标在左边列表上划过或者点击后者滑动条滚动, 都会触发右边的自定义控件的刷新,

image

vczh commented 2 years ago

既然用了DirectX那肯定是整个一起刷新啊,2022年局部刷新已经没有意义了。

GacUI具体的实现,是IGraphicsElement会在被通知修改的时候做一下标记(譬如颜色大小文字什么的),所以界面需要变化就一定会刷新,没有变化他就不刷新了。

但是你可以手动触发刷新,就像GacUI_Windows/Direct2DClock这个demo做的这样,在GlobalTimer函数里面调用this->GetRelatedControlHost()->GetGraphicsHost()->RequestRender(),就会然他每一帧都刷新。你也可以在其他时候调用,一般都是有自绘的部分,用了GuiDirect2DElement或者GuiGDIElement,那GacUI就不知道什么时候需要刷新了。

bizehao commented 2 years ago

是有事件发生,自绘这块就有可能被重绘。好的。

vczh commented 2 years ago

嗯,在列表上做鼠标动作的时候,皮肤会做出相应,譬如说变颜色啦,这个时候就会修改某个IGraphicsElement的属性,于是就重绘了。

你这是在做播放器吗?

bizehao commented 2 years ago

是的

bizehao commented 2 years ago

那界面中存在动画的话,可能整个界面都会在不停地刷新

vczh commented 1 year ago

是的,不刷新怎么让动画跑起来呢?

bizehao commented 1 year ago

测了下,确实,整页刷也并不耗时