Coder Social home page Coder Social logo

gac's People

Contributors

vczh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gac's Issues

Textbox 有内容时,CPU会高

我利用gaclib写了一个剪贴板的查看工具https://github.com/isee15/Clipboard-Viewer。界面里面有一些TextBox。
当TextBox里面有类似下面这些内容的时候,CPU容易达到17-25(CPU是双核)。
ps:使用过程中,有些接口没找到怎么实现。比如程序图标设置的接口,WString的Format,TextBox的AppendText
“00000000 7B 5C 72 74 66 5C 61 6E {\rtf\an
00000008 73 69 7B 5C 66 6F 6E 74 si{\font
00000010 74 62 6C 7B 5C 66 30 20 tbl{\f0
00000018 4E 53 69 6D 53 75 6E 3B NSimSun;
00000020 7D 7D 7B 5C 63 6F 6C 6F }}{\colo
00000028 72 74 62 6C 3B 5C 72 65 rtbl;\re
00000030 64 33 33 5C 67 72 65 65 d33\gree
00000038 6E 31 31 31 5C 62 6C 75 n111\blu
00000040 65 31 33 33 3B 5C 72 65 e133;\re
00000048 64 32 35 35 5C 67 72 65 d255\gre
00000050 65 6E 32 35 35 5C 62 6C en255\bl
00000058 75 65 32 35 35 3B 5C 72 ue255;\r
00000060 65 64 30 5C 67 72 65 65 ed0\gree
00000068 6E 30 5C 62 6C 75 65 30 n0\blue0
00000070 3B 5C 72 65 64 30 5C 67 ;\red0\g
00000078 72 65 65 6E 30 5C 62 6C reen0\bl
00000080 75 65 31 32 38 3B 5C 72 ue128;\r
00000088 65 64 30 5C 67 72 65 65 ed0\gree
00000090 6E 30 5C 62 6C 75 65 32 n0\blue2
00000098 35 35 3B 5C 72 65 64 31 55;\red1
000000A0 33 36 5C 67 72 65 65 6E 36\green
000000A8 30 5C 62 6C 75 65 30 3B 0\blue0;
000000B0 7D 5C 66 30 20 5C 66 73 }\f0 \fs
000000B8 31 39 20 5C 63 66 31 20 19 \cf1
000000C0 5C 63 62 32 20 5C 68 69 \cb2 \hi
000000C8 67 68 6C 69 67 68 74 32 ghlight2
000000D0 20 47 75 69 43 65 6C 6C GuiCell
000000D8 43 6F 6D 70 6F 73 69 74 Composit
000000E0 69 6F 6E 5C 63 66 33 20 ion\cf3
000000E8 2A 20 5C 63 66 34 20 63 * \cf4 c
000000F0 65 6C 6C 5C 63 66 33 20 ell\cf3
000000F8 20 3D 20 5C 63 66 35 20 = \cf5
00000100 6E 65 77 5C 63 66 33 20 new\cf3
00000108 20 5C 63 66 31 20 47 75 \cf1 Gu
00000110 69 43 65 6C 6C 43 6F 6D iCellCom
00000118 70 6F 73 69 74 69 6F 6E position
00000120 5C 63 66 33 20 3B 5C 70 \cf3 ;\p
00000128 61 72 20 09 09 09 5C 63 ar उ찀쳌쳌쳌쳌绤̝᳸׵킰װ尉찀쳌쳌쳌쳌绤̝᳸׵킰װc
00000130 66 34 20 72 6F 77 32 74 f4 row2t
00000138 61 62 6C 65 5C 63 66 33 able\cf3
00000140 20 2D 3E 5C 63 66 36 20 ->\cf6
00000148 41 64 64 43 68 69 6C 64 AddChild
00000150 5C 63 66 33 20 28 5C 63 \cf3 (\c
00000158 66 34 20 63 65 6C 6C 5C f4 cell
00000160 63 66 33 20 29 3B 5C 70 cf3 );\p
00000168 61 72 20 09 09 09 5C 63 ar उ찀쳌쳌쳌쳌绤̝᳸׵ꉨ״尉찀쳌쳌쳌쳌绤̝᳸׵ꉨ״c
00000170 66 34 20 63 65 6C 6C 5C f4 cell
00000178 63 66 33 20 2D 3E 5C 63 cf3 ->\c
00000180 66 36 20 53 65 74 53 69 f6 SetSi
00000188 74 65 5C 63 66 33 20 28 te\cf3 (
00000190 30 2C 20 30 2C 20 31 2C 0, 0, 1,
00000198 20 31 29 3B 5C 70 61 72 1);\par
000001A0 20 09 09 09 5C 63 66 34 उ찀쳌쳌쳌쳌绤̝䜈׵킰װ尉찀쳌쳌쳌쳌绤̝䜈׵킰װcf4
000001A8 20 63 65 6C 6C 5C 63 66 cell\cf
000001B0 33 20 2D 3E 5C 63 66 36 3 ->\cf6
000001B8 20 41 64 64 43 68 69 6C AddChil
000001C0 64 5C 63 66 33 20 28 5C d\cf3 (
000001C8 63 66 34 20 64 61 74 61 cf4 data
000001D0 46 6F 72 6D 61 74 54 65 FormatTe
000001D8 78 74 5C 63 66 33 20 2D xt\cf3 -
000001E0 3E 5C 63 66 36 20 47 65 >\cf6 Ge
000001E8 74 42 6F 75 6E 64 73 43 tBoundsC
000001F0 6F 6D 70 6F 73 69 74 69 ompositi
000001F8 6F 6E 5C 63 66 33 20 28 on\cf3 (
00000200 29 29 3B 7D 00 ));}.

设备丢失问题依然存在

目前学习Gac框架中(0.7.5最新版本),想借助Gac和VFS自己做个东东,将算法和数据结构方面用STL和WTF替换了,相关的宏如DEFINE_GUI_GRAPHICS_ELEMENT等用类模板替代了(方便调试),从实现基本的控件做起(代码太庞大不易掌握),做一个袖珍版。
D2D当设备丢失时会有D2DERR_RECREATE_TARGET
,这时需要重新创建资源,这可以在Cache类中实现,由于Cache是资源的所有者,RecreateRenderTarget时就可以调用Cache重新创建资源。
发生设备丢失的情况:打开GUI程序,并最小化,这时一旦有UAC窗口出现(如打开Spy++等),关掉UAC后,GUI程序便空白。这是由于0.7.5版本中的GacUIWindows.cpp中144行,发现index == -1一直为false,导致没有处理。

解决方法是:在D2DERR_RECREATE_TARGET时调用D2DProvider::RecreateRenderTarget,windowComposition->SetAttachedWindow不必调用了,然后在D2DWindowListener::RecreateRenderTarget中将renderTarget先lock住(防止RenderTargetChanged执行过程中调用D2DRenderTarget::GetDirect2DRenderTarget出错,使之返回nullptr),使得D2DRenderTarget::GetDirect2DRenderTarget返回null,然后执行GetMainComposition()->SetRenderTarget(nullptr)触发RenderTargetChanged操作,最后unlock。
这时,renderTarget已经为空,还未创建,创建的时机在D2DWindowListener::RebuildCanvas中(设备丢失时,窗口不会有焦点,是不用展示的,故不用立即创建资源)。CreateHwndRenderTarget成功后,调用ID2DRenderTarget的RecreateResource和GetDirect2DResourceManager的RecreateResource,原因是,两者都有cache资源需要重新创建。等创建完资源过后,调用GetMainComposition()->SetRenderTarget设置renderTarget并触发RenderTargetChanged,完成资源的全部重新创建。

期间还发现了Gac的一些细节上的问题,如多行TextBox中按左右键,焦点在竖直方向上有“节奏”变化等(仅当TextBox比较小时),选中文本时鼠标移至TextBox外下方不断移动,也会发生这种情况。
解决方法是TextBoxCommonInterface::Move(TextPos pos, bool shift)中连续调用两次callback->ScrollToView(viewPoint),负负得正。。

最后感谢轮子哥分享这么好的代码(>^ω^<)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.