作者cplusplus (C++)
看板C_Sharp
标题Re: [请益] 想请教关於GDI+的问题
时间Mon Feb 27 15:31:04 2006
1F:推 ZongShuo:感谢大大罗!! 您的意思我懂 我也有嚐试过把点存起来 02/24 22:28
2F:→ ZongShuo:然後再每次把点叫出来重新绘制 不过想请教一下 是否有 02/24 22:29
3F:→ ZongShuo:任何方法 能够在视窗被切换以後触发来把存起来的点重新 02/24 22:29
4F:→ ZongShuo:绘制一次呢?! 感谢您了 m(_ _)m 02/24 22:30
5F:→ ZongShuo:因为若是我原来只要一出现一个点的资料就画一次的话 02/24 22:32
6F:→ ZongShuo:萤幕会闪得很快!!! 因为我读到资料的速度是以ms来算的:$ 02/24 22:32
7F:→ ZongShuo:sorry 不是ms是ns 先感谢罗!!! 02/24 22:33
8F:推 yalight:重画的是通常都不用自己做, 你只要 override 那个视窗的 02/24 23:43
→ yalight:画图 method 就可以了 ..XD
02/24 23:45
不知道你说的跟我想的是否相同
我指的是 如果萤幕被挡住了 你就必须把被挡住的部分重新画一次
而不是"每收到一个点就全部画一次" 这样太浪费资源了
当视窗被遮盖後重新显现或是显示的一些特性被改变时(像是解析度或是视窗大小etc)
就会丢出一个重新绘制视窗的讯息给该视窗 该视窗就会进行重绘的动作 这概念很基本
希望你要有这概念 不然以後的路不好走 XD
上面的yalight有提到...如果你了解一点OO概念的话 应该知道他再说什麽
如果不知道的话 那还有些东西要学
但简单说 视窗收到重绘讯息 在C#内代表那个视窗的物件 就会呼叫其内的某个method
来做重绘的动作 因此你只要override那个method 之後重绘动作就会依照你的method进行
你可以覆写那个method 内容就是把所有点的点都画出来(从第一个点开始)
所以 你的接收并画出 跟 重绘(全部从头画出) 是两个不同的动作 不能写在一起
简单来说 应该像是
storage s
recieve
get data and print it
save data in s
repaint
print all data in s
当然 你说你的资料是以ns为单位递增 (虽然我太不相信...ns=10^-9 除非特殊仪器
记忆体存取都没这麽快了 该不会是说microsecond(10^-6)吧?)
想必资料一定很多 你也可以不用收到一个点马上画一次 画的速度绝对赶不上资料产生
的速度 你可以收集个几时点或是几百点再画一次也可以
而且重绘的方式你可以甘脆把之前画好的画面留下来 每次重绘就把画面重画到萤幕上
不然每次画几千几万个点 不如画一次萤幕好了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.217.14