查看完整版本: Win程小画板

TNTleft 2008-9-28 10:31

Win程小画板

本次何老师对于小画板的要求如下:
    使用sdk+c
    跟Windows的功能越像越好。所有Windows的功能都要实现。
    根据与Windows的功能相似程度、代码质量等标准来评分。少功能就要扣分。
    提交时间:十一月中旬
   
    本要求只适用于选了何老师课程的同学,户老师的不清楚。
   
    大家抓紧时间做吧,还是那句话 保重身体 少熬夜

colorful_vagase 2008-9-28 10:49

干他个日出

zhangtc868788 2008-9-28 11:12

又是小画板。。。多少年了。。。

TNTleft 2008-9-28 11:36

年年有今日 岁岁有今朝

leonin 2008-9-28 11:37

小呀么小画板呀

hawk_with_wind 2008-9-28 18:35

今年貌似要求降低了..当年我们是做矢量图的..更加复杂...

TNTright 2008-9-28 18:40

大家好!

OwnWaterloo 2008-9-28 18:44

sdk+[color=red]c[/color] ???

yaojunguang 2008-9-28 18:48

应该是API吧,我的SDK就是MFC的......^_^

TNTleft 2008-9-28 18:54

[quote]原帖由 [i]OwnWaterloo[/i] 于 2008-9-28 18:44 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8071736&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
sdk+c ??? [/quote]
nod

TNTleft 2008-9-28 19:08

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-28 18:48 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8071743&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
应该是API吧,我的SDK就是MFC的......^_^ [/quote]
纯c 我问过何老师了
当时我还补问了一句 那stl的也不能用咯 他点头
如果何老师在的话 请亲自出来确认一下吧

OwnWaterloo 2008-9-28 19:26

不解……

纯C的意思是?
用“.c” 做后缀名?  MSVC中使用/TC 选项? GCC用 -x c file.c ?

不使用STL的话,维护图形数据的表也自己实现?

这门课学的是Windows程序设计呢
还是C与C++的区别&数据结构……

涅槃 2008-9-28 21:18

户sir上节课貌似也说了……我听到一句是不能用mfc的……助教大大也去问问嘛~

TNTleft 2008-9-28 21:48

[quote]原帖由 [i]涅槃[/i] 于 2008-9-28 21:18 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8071957&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
户sir上节课貌似也说了……我听到一句是不能用mfc的……助教大大也去问问嘛~ [/quote]
mfc是确实不能用的

我不是户sir的助教

NSObject 2008-9-28 22:25

娜天我有空了,可以写个Mac OS X版的玩玩... :laugh:

colorful_vagase 2008-9-28 22:59

[quote]原帖由 [i]TNTright[/i] 于 2008-9-28 18:40 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8071726&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
大家好! [/quote]
谁啊!?:food_smile:

OwnWaterloo 2008-9-29 01:36

[quote]原帖由 [i]涅槃[/i] 于 2008-9-28 21:18 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8071957&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
户sir上节课貌似也说了……我听到一句是不能用mfc的……助教大大也去问问嘛~ [/quote]
户sir应该只有纯API 没有纯C的要求吧。。。
户sir的课件里还有一章是讲如何用C++类封装窗口的。

TNTright 2008-9-29 02:47

[quote]原帖由 [i]colorful_vagase[/i] 于 2008-9-28 22:59 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8072125&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]

谁啊!?:food_smile: [/quote]哼 我不告诉你 你是坏人

omale 2008-9-29 10:34

是SDK + C。这才是最纯正的Windows程序设计。

为什么这么要求呢?因为以后你们即使再用到C/C++写Windows程序,肯定是MFC、STL、ATL、WTL……用C跟SDK的机会少之又少。但是Platform SDK才是一切Windows程序设计的根本。基础没有实践,对其层层封装就别提了。

至于为什么不能用stl?stl里面的容器算法多好用啊?只是想让大家锻炼一下怎么自己管理自己的数据。尤其是针对一个一定代码量的项目。其次,不是所有的地方都能用stl的,Windows和Linux的OS Kernel里面都没有stl,embedded system里面也没有stl。再抠门一点来说,对画图的某些功能,stl里面提供的算法和数据结构也并不一定是最优的。

总而言之,这个作业的目的不是去完成设计mspaint的任务,而是尽可能通过作业多锻炼点东西。

总而言之,虽然是画图,却跟以往的要求大不一样,今年是要完全自己克隆一个mspaint。难度降低了?并不见得。

sinfawkes 2008-9-29 10:50

看来我要重做了..唉...悲惨啊...

浪漫如枫 2008-9-29 12:16

都不知道现在自己写出来的代码和以前比会有什么样的差别...有空写一个看看

zhangtc868788 2008-9-29 12:32

原来画图板是要用C写的。。。。

小推 2008-9-29 13:00

[quote]原帖由 [i]omale[/i] 于 2008-9-29 10:34 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8072556&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
是SDK + C。这才是最纯正的Windows程序设计。

为什么这么要求呢?因为以后你们即使再用到C/C++写Windows程序,肯定是MFC、STL、ATL、WTL……用C跟SDK的机会少之又少。但是Platform SDK才是一切Windows程序设计的根 ... [/quote]


谁说的。。。
Windows的确是用C写出来的,用C写Windows程序也无可厚非,但如果是纯C写画板是不是有点过了?!
传说连class都不能用,如果仅以C的结构体来搭建链表和维护数据,代码量那是几何级的增长吖。
不能用STL很正常,但如果连自己实现STL的机会都不给,那小孩子们又要怎么去了解熟悉掌握STL呢?!

C是没有封装特性的,更别提用对象管理资源的好处了。
这对以后的发展并没有太大帮助,况且几乎没有多少人以后会去做OS的开发。
用C++有什么不可以呢?!禁止包含vector, map, list等头文件不就可以了么。。。

“因为以后你们即使再用到C/C++写Windows程序,肯定是MFC、STL、ATL、WTL”
以后写的Windows程序的确大部分用到的是这些库,那现在难道不应该是学习理解掌握这些库的时候么!?
这些库的强大之处不正是因为它们用了C++的封装特性么?!

何必局限于Platform SDK和纯C呢?!

PS: 要用纯C,何sir你先好好教教07的小朋友们MACRO的用法吧

sinfawkes 2008-9-29 13:12

我顶!!!

RAI 2008-9-29 13:23

小推真牛X。。。。

Angelings 2008-9-29 13:32

何牛这也太残忍点了吧。。。。。。。。。。。。

天天HAPPY好心情 2008-9-29 13:46

唉。。以后学院win程的课有的看了。。估计也要疯抢了。。哈哈。。

colorful_vagase 2008-9-29 23:25

个人觉得c一切才是windows、mac开发的根基。。支持何老师~~~

yaojunguang 2008-9-30 01:07

回复 19# 的帖子

唉,有是C与C++之争,看到就是不爽,其实我一直认为语言是为思想服务的,语言不能包含太多其他的东西,语言与思想应该独立开,不管是面向过程还是面向对象他们都是一种思想,谁说C就不可以用CLASS,这些都是偏见,那天C改一下不久可以用了吗?新的语言的引入我一直认为是一种失败的选者,也许这其中包含了太多的利益问题,就像C#一样何必又多搞出那么多东西呢?语言的更本是不需要多少变化的,需要变化的是人们的思想,任何思想都不会选者语言,只要是进步的有益的,任何一门语言都可以将其吸收.其实我觉得我们应该关心如何将各种思想引入,而不在于讨论"到底是白话文好还是文言文".说白了这个更本就没有可比性,看看现代诗就可以明白.......

真想做秦始皇,把计算机语言统一一下.

vn42 2008-9-30 09:01

面向对象的思想也要好好体会啊,范尼和杰拉德不能兼得

小推 2008-9-30 17:03

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
唉,有是C与C++之争,看到就是不爽,其实我一直认为语言是为思想服务的,语言不能包含太多其他的东西,语言与思想应该独立开,不管是面向过程还是面向对象他们都是一种思想,谁说C就不可以用CLASS,这些都是偏见,那天C改一下 ... [/quote]

C改一下能用Class了。。那还是C么?!那不就又多了一门语言了么?!
我觉得这是一个编程思想的问题~而非语言的问题

通过一系列的宏,就能够将C转型到C++,并且实现STL的部分功能。
关键在于对不同的程序开发周期和人力资源,选择怎样的开发环境。

TJ_Sniper 2008-9-30 22:06

顶ALL

都是bull&cow

浪漫如枫 2008-9-30 22:20

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
唉,有是C与C++之争,看到就是不爽,其实我一直认为语言是为思想服务的,语言不能包含太多其他的东西,语言与思想应该独立开,不管是面向过程还是面向对象他们都是一种思想,谁说C就不可以用CLASS,这些都是偏见,那天C改一下 ... [/quote]

话也不能完全这么说,现在的语言都是为提高生产力服务的~C#有C#的用处~~"语言是为思想服务的"这条我顶~~~

OwnWaterloo 2008-10-1 04:07

给何牛的建议~

“总而言之,这个作业的目的不是去完成设计mspaint的任务,而是尽可能通过作业多锻炼点东西。”
可以看出何老师的项目要求也是用心良苦,非常注重学生技能的培养。
先顶何老师对“教师”这一职位的责任心~  遵守职业道德的企业或员工在中国已经是奢侈物了…… 囧囧囧

因此,斗胆向何老师提出两点建议:

[b]一、 更具体的描述项目要求。[/b]
[color=red]克隆[/color]mspaint? 具体是要完成哪些功能? 各占多少分数? 如何评分?

是保存位图还是矢量图?
mspaint就是位图,但是显然矢量图才谈得上自己设计与管理数据。

功能列表:(不全)

    工具箱 (如果是做矢量图, 很多工具是无意义的)
        1.选择多边形
        2.选择矩形
        3.橡皮
        4.颜料桶
        5.取色
        6.放大镜
            6.1.滚动条
        7.铅笔
        8.画刷
        9.喷枪  (喷枪的效果如何定义?)
        10.文字
            10.1.文字工具栏
        11.直线
        12.曲线
        13.矩形
        14.多边形
        15.椭圆
            15.1.按住shift强制画圆
        16.圆角矩形

        17.线宽选择 (以上6种图形使用同一份线宽数据)
        18.填充模式 (以上4种图形分别保存填充模式数据)
        19.文字透明模式

    菜单
    1.菜单加速键
    2.合理的disable项目

        文件菜单:

        基本的
        1.新建
        2.打开
        3.保存
        4.另存
        5.支持的文件格式 —— BMP(深度)、JPG、GIF、PNG、TIF

        高级的
        1.从扫描仪或照相机
        2.最近打开文件列表

        与之相应的
        1.标题栏改动
        2.未保存的修改提示(当前编辑的文档有改动未保存,转到另一个文件时提示“将改动保存到XXX” —— 是 否 取消)

        打印相关的
        1.打印预览
        2.页面设置
        3.打印

        其他
        1.发送
        2.设置为墙纸
            2.1平铺
            2.2居中
        3.退出

        编辑菜单:

        Undo/Redo
        1.可撤销次数 —— 3次

        剪贴板相关的
        1.剪贴
        2.复制
        3.粘贴
        4.清除
        5.全选

        文件相关的
        1.复制到
        2.粘贴来源
        3.支持的文件格式 —— BMP(深度)、JPG、GIF、PNG、TIF

        查看菜单:

        界面元素相关的
        1.工具箱
        2.颜料盒
        3.状态栏
        4.文字工具栏

        缩放相关的
        1.常规尺寸(Ctrl+PgUp)
        2.大尺寸(Ctrl+PgDn) (2倍)
        3.自定义(同放大镜 4种倍率)
        4.网格
        5.缩略图
        6.滚动条

        图像菜单:
        1.旋转
        2.拉伸/扭曲
        3.反色
        4.属性
        5.清除
        6.不透明

        颜色菜单:
        
        1.基本颜色列表
        2.颜色编辑器
            2.1.自定义颜色列表
            2.2.添加到自定义颜色列表
            2.3.编辑器中的颜色来自前景色
            2.4.如果前景色与基本颜色列表或者自定义颜色列表中的项目匹配,选择框移动到该项目 (没什么用的功能……)

        帮助菜单:
        
        1.帮助文件
        2.关于对话框 (windows版本,版权,注册用户与单位,物理内存)
            2.1.Windows版本
            2.2.Windows版权
            2.3.注册用户与单位
            2.4.可用物理内存

    颜料盒:
        1.前景色
        2.背景色
        3.颜色列表

    状态栏:
        1.帮助提示
        2.起点坐标
        3.面积

    文字工具栏:
        1.字体
        2.字号
        3.区域
        4.粗体、斜体、下划线、(还有一个不知道是什么……)

[b]二、规划好期中项目的重点[/b]

我认为期中项目重点应放在Windows编程的基础概念上。
之所以这么说,是有的太多类似的经验(自身和他人):

基础不牢成为学习更高技术的障碍,然后
    回头补   -> 不如在一张白纸时学得容易,许多错误概念已经根深蒂固
    勉强应付 -> 不得要领、是是而非

上面列到的mspaint的部分功能列表中,我(最保守的)觉得有些功能就是不必要实现的,如:
1.从扫描仪或照相机得到图片
  太难

2.支持多种图像文件格式,打印相关的功能
  需要熟悉图片格式标准、打印功能、调色板功能
  都不属于基础内容,图片格式标准完全是体力活
  打印、调色板一般情况用不上而且没有设备不方便调试

3.文件菜单->设置为桌面,关于对话框->显示机器的可用内存
  为实现该功能,绝大部分时间花在查询相应API上,不值

因为重点是Windows编程基础,所以关于禁止MFC、ATL、WTL的使用,我是支持的。
但是纯C是不是过火了一点……
精力毕竟是有限的……
时间也是挺紧的……
即使除去上面说的3个功能,要做的工作还是很多的……
想要通过期中项目“毕其功于一役”,最后很有可能什么技能都是半吊子……
希望何老师三思……

[b]放松对C++限制的理由:[/b]
1.把陷入realloc、fopen、strcmp等细节的时间,花在理解消息循环、各个消息含义、GDI和DC的操控等基础概念上
2.利用析构函数,让对象持有并管理资源的思想也是很重要的
3.即使不许使用STL,而自行设计数据结构,C++也因为template而比C有更强的表达能力
4.能放松对STL的限制更好
    避免耗费不少时间,得到 class Node; class List : public Node; 的设计
5.通常来说,这个项目都是大家练习面向对象编程思想的第1个项目(因为面向对象编程那门课的设计存在问题囧)
    而C++有语言支持,也比C有更强的表达能力
6.……
[b](略)[/b]……

OwnWaterloo 2008-10-1 04:31

[quote]原帖由 [i]omale[/i] 于 2008-9-29 10:34 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8072556&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
[align=left]至于为什么不能用stl?stl里面的容器算法多好用啊?只是想让大家锻炼一下怎么自己管理自己的数据。尤其是针对一个一定代码量的项目。[/align]
[align=left]其次,不是所有的地方都能用stl的,Windows和Linux的OS Kernel里面都没有stl,embedded system里面也没有stl。[/align]
[align=left]再抠门一点来说,对画图的某些功能,stl里面提供的算法和数据结构也并不一定是最优的。[/align][/quote]

[b]1.何老师,其实这个项目时间还是很赶的……从我自己学和当助教的经验来看。[/b]
如果项目压力太大,而且需要专注的细节太多,最终很有可能每个细节都没处理妥当。
以后用C的机会还有,比如linux程序设计,还有软件工程……,用WinAPI的机会几乎没有了,是否专心把WinAPI练好更重要一点呢?

“你懂得C,所以C++不在话下”
                                                                        《C专家编程》 11章
我觉得这句话[color=red]反[/color]过来说才对。 C++程序员随时可以转行写C代码。
从语法细节来说:C++的C部分,只和C有微小差异。
真要练习使用C的话,重点是学习一些C语言适合的[color=red]编程风格[/color]。
用这个项目的时间去学C的编程风格似乎不够……去体会去[color=red]陷入[/color][color=black]语法[/color]细节是不是又太浪费了一点……


[b]2.没有STL。为什么?[/b]
因为没有C++编译器吗?只要C++编译器对C++标准有足够的支持,就可以实现STL。
无责任猜想(这种移植工作我没做过):
下一份STLPort
只要C++编译器足够标准,algorithm、functional应该不用修改。
可能memory要稍稍修改,重写allocator,然后vector、list、map、set、stack、queue就可以使用了。
iosfwd可能改动更多一点,重写char_traits,然后string、sstream都可以用了。
要用iostream和fstream可能要麻烦很多。
但是这是[color=red]一劳永逸[/color]的投入。

[b]3.STL不是最优,或者自己实现STL代价太大。[/b]
还是那个观点,实现数据结构与算法C++比C有更强的[color=red]表达能力[/color],因为有template机制。

[[i] 本帖最后由 OwnWaterloo 于 2008-10-1 05:59 编辑 [/i]]

OwnWaterloo 2008-10-1 05:28

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
[align=left]语言是为思想服务的[/align][/quote]
由一个正确观点

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
[align=left]真想做秦始皇,把计算机语言统一一下.[/align][/quote]
得到一个错误结论……

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
语言与思想应该独立开[/quote]
但是语言至少要对该编程思想有足够的[color=red]支持[/color]。

用C实现动态绑定,接口继承,实现继承,析构函数都是可以的,甚至有看到过用汇编实现XXX的标题(内容看都懒得看了)
因为C++的前身,就是将C++源代码转化成C代码,然后用C编译器编译。而C编译器又可以输出汇编代码。
但那只是玩,是将C++编译器能够[color=red]自动无错[/color]实现的功能,手动实现一遍,还增加出错机会。
违背了利用计算机帮助人类完成重复劳动的[color=red]初衷[/color]。

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
那天C改一下不久可以用了吗[/quote]
那就是C++了,至少是C++的前身了。

[quote]原帖由 [i]yaojunguang[/i] 于 2008-9-30 01:07 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8073703&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]
(思想)只要是进步的有益的,任何一门语言都可以将其吸收
[/quote]
你看Java把泛型编程吸收成什么样子了?
C++在支持多种编程思想上已经是出类拔萃了,但是又因太复杂而被许多人弃之不用。(即使对不需要特性,C++的学习代价几乎是[color=red]0[/color])



测量硬币的直径,房间的高度,铅球的成绩。
工具有游标卡尺,钢卷尺,皮尺。
你会怎么选?

最终运行程序的是处理器,是不是所有程序都可以用机器码写?
显然不是,理由还是复杂性,人类无法接受。
所以需要将设计分层,让不同的开发人员工作在各自的[color=red]抽象层[/color]上。

同一语言也不能描述所有的抽象层,理由仍然是复杂性。
C++可以被拆成4部分,其中2部分合起来就是Java,你看Java程序员比C++多了多少?
所以多种语言存在是有其[color=red]合理性[/color]与[color=red]必要性[/color]的。

总之,[b]存在即合理[/b]。

[[i] 本帖最后由 OwnWaterloo 于 2008-10-1 05:31 编辑 [/i]]

烫烫烫 2008-10-1 08:43

一口吃個胖子,估計會撐死不少。。。

vn42 2008-10-1 09:24

yaojunguang 2008-10-1 12:24

[quote]原帖由 [i]小推[/i] 于 2008-9-30 17:03 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8074386&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]


C改一下能用Class了。。那还是C么?!那不就又多了一门语言了么?!
我觉得这是一个编程思想的问题~而非语言的问题

通过一系列的宏,就能够将C转型到C++,并且实现STL的部分功能。
关键在于对不同的程序开发 ... [/quote]
照你那样说马克思主义就不该引入中国,引入了就不是汉语了...一个词送你

小推 2008-10-1 12:47

[quote]原帖由 [i]yaojunguang[/i] 于 2008-10-1 12:24 发表 [url=http://bbs.tongji.net/redirect.php?goto=findpost&pid=8075796&ptid=596840][img]http://bbs.tongji.net/images/common/back.gif[/img][/url]

照你那样说马克思主义就不该引入中国,引入了就不是汉语了...一个词送你 [/quote]

思想和语言是两回事。。。OK?
页: [1] 2 3
查看完整版本: Win程小画板