木感想

常常思索 没有结果 来来去去 依稀记得

导航

设计Client

最近设计了一个工作良好的图像处理客户区。

当客户区移动缩放时,图像都能居中显示。

软件的下载地址:https://files.cnblogs.com/charles_lznix/Zooly.rar

主要解决了几个问题:

1、快

2、操作方式多样,能适应客户区尺寸改变、客户区位置移动甚至超出屏幕也能工作良好。

 

图像的缩放、角度变换,滚动条的配合等事情,将在此基础上进一步设计出来。

 

--------------------------------------------------------------------------------------------------

进一步的改进

上次的设计还缺少一些功能,这次增加缩放、移动、滚动条。

图1

图2

图1、2是效果图,可以看到已经有了客户区、画布、图片、滚动条,

操作自定义了几个简单的功能:

上、下、左、右:移动图像。

Ctrl+上、下:放大、缩小图像。

LButton:在图像中点击处绘制一个小矩形。

我希望这个工作区比PS的效果要好,主要是绘图快、操作稳定。

下载地址:https://files.cnblogs.com/charles_lznix/Zooly1.rar

好像可以用的,我已经把资源装到Exe中了,大概测了一下可以用,如果不能用就看不到了,要告诉我。

还有一些小问题,比如图像移到接近顶部时,他娘的不刷新,显的被卡了一下。等今天再改。

 

设计好上面这些后,在WinApp的OnIdle中进行渲染,就能形成动画了。

BOOL CZoolyApp::OnIdle(LONG lCount)
{
    if(CWinApp::OnIdle(lCount)) return TRUE;

    ...

    MyRender();

    ...

}

如此设计,客户区基本成型,工作良好,能绘制各种动画。

工作这么些年,我已经习惯打开"任务管理器"检查软件性能,发觉该程序始终占据50%CPU,消耗很多CUP count

这是什么原因呢?

为此设计了D3D类型的客户区,使用BackSurface进行绘图,消耗依然如故...

将OnIdle程序移入Thread中执行,还是消耗如故...

减少程序渲染层,还是如此...

这是个大问题,长时间高负载工作,会时CPU呼呼怪叫,在多开时更会卡的不成样。

后来解决了,怎么解决的呢?

很简单 在MyRender()中加入一句Sleep(20)

CPU消耗立刻降低到0-8% CPU count也在0-1之间

原因是什么呢?我分析是Sleep能挂起程序,给其他工作让路,也就是说,我们原先是堵塞了CPU造成了高消耗。

只要你Sleep了,谦虚的对其他程序说,请你先做吧,你的程序就会工作的更平和。

 

好了经过接近2个月的设计,Client基本成型,各个图层层次良好,基本的类也都建立起来了。软件的基础部分基本完成。

下来是扩展工作,脚本设计、资源管理都是他们的主题。有了成果再继续发心得。

posted on 2011-10-13 12:08  跌跌撞撞  阅读(279)  评论(0)    收藏  举报