新手写 windows 窗口程序 应该怎么去学习 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
m939594960
V2EX    .NET

新手写 windows 窗口程序 应该怎么去学习

  •  
  •   m939594960 2015-11-17 02:39:28 +08:00 7790 次点击
    这是一个创建于 3621 天前的主题,其中的信息可能已经有所发展或是发生改变。

    会 php Javascript
    都是脚本类的编程

    最近想写一些 windows 窗口程序 所以想学 C#
    感觉与原来学得脚本类的语言还是有点差距的
    但是不知道怎么去学 有没有好点的视频教程 /书
    现在市面上的书 /视频很多 但是找不到很合适我去学习的 都是 IF else while do 什么的 很是蛋疼 这些基础的东西我还是能很快的理解的。

    每学一门语言内心都很挣扎。。。 比如
    1是不是 C++ qt 效率更高更好呢。等以后我在学.net (道理我都懂 但是就想找个更合适的)
    2.是 WPF 好呢还是 winform 好呢(虽然我也不知道有啥区别)
    3.这个语言有 XXX 缺点 XXX 缺点 好烦啊 到底学不学啊。。。。
    4.找到一些相关的书和教程 一看是 2013 年出的就会觉得很不爽 不想读 怕技术更新了,学得思路不对了!

    37 条回复    2015-11-19 10:10:39 +08:00
    chinvo
        1
    chinvo  
       2015-11-17 02:50:51 +08:00
    我是从 VB/ASP 转 PHP 再到 C++的,说说我个人的感受吧。

    如果已经有了扎实的 PHP 或 JS 基础,那么当你学习其他语言的时候,可以针对其他语言的特性学习而跳过重复的内容。不过如果你尝试阅读一门语言的深入级别的书籍时发现存在不易理解甚至无法理解的东西,我建议还是回头重新学习入门级的资料。不要因为 if else while do for 等基本语法而感到无聊,因为你可能在跳过这些内容时遗漏非常重要的语法基础,比如 PHP 是弱类型的,然而 C# 是强类型的。
    chinvo
        2
    chinvo  
       2015-11-17 02:54:46 +08:00
    至于 C++ + QT ,在 Windows 窗口程序方面,明显不如微软自家原生的 WPF winform 和 MFC 贴近系统生态;
    没有哪一门语言是没有缺点的,因为任何一门语言都有自己的拥护者和反对者;
    如果只是入门的话,稍微旧一点的资料也没关系,因为一门成熟的语言一般不会在这么短的时间内对基础内容进行不向后兼容的修订。
    chinvo
        3
    chinvo  
       2015-11-17 02:55:26 +08:00
    只是个人的拙劣见解,若有大神路过,请轻喷 ><
    msg7086
        4
    msg7086  
       2015-11-17 02:58:29 +08:00   1
    第一步 get things done 。
    接下来,优化他。
    一直优化到有一天你觉得不重写他就不行了的时候,说明你已经很牛逼了。
    m939594960
        5
    m939594960  
    OP
       2015-11-17 03:01:16 +08:00
    @hinvo 恩 认真读了一下 收获很大 谢谢 !
    loading
        6
    loading  
       2015-11-17 07:00:37 +08:00 via Android
    如果不是要深入,是临时任务,可以看下 aauto
    Sentive
        7
    Sentive  
       2015-11-17 07:51:53 +08:00   1
    学语言要不了多久的,最重要的是学习各种框架,看帮助。然后做几个项目之后,就可以看看设计模式了。
    Athrob
        8
    Athrob  
       2015-11-17 08:24:52 +08:00
    C++的话直接 Qt5 吧
    优点: 组件非常丰富, 大部分组件都支持常用 css 和 html 标签, 信号槽机制用起来也很方便, 性能相对较好.
    缺点: 需要携带 Qt 的 dll, 有点庞大. 第一次启动程序会有点慢(因为要加载很多 Qt 的 dll)

    C#的话 WinForm 已经很完善了
    优点: 组件也很丰富, 各种组件添加事件响应都可以直接在设计器完成(Button 的话直接双击就会自动生成 OnClick 代码)
    还有 C#里各种 delegate, lambda, dynamic, linq 用起来超级方便
    缺点: 需要.net framework, 且软件对外发布的话要自己加密或混淆, 否则很简单就能把 C#的 exe 或 dll 还原成代码.

    以上是个人使用时的感受, 仅供参考
    Athrob
        9
    Athrob  
       2015-11-17 08:26:16 +08:00
    还有 Qt 和 C#的文档都很完善, Qt 的代码风格也很优美.
    hqs123
        10
    hqs123  
       2015-11-17 08:31:18 +08:00
    直接 Qt 把,直接写 windows 窗口已经不多了。
    wellsc
        11
    wellsc  
       2015-11-17 08:34:09 +08:00
    Ironpython
    vitovan
        12
    vitovan  
       2015-11-17 08:41:21 +08:00
    @msg7086

    get things done +1

    get things done / get things done / get things done / ......

    然后就好了,业务驱动是最好的。

    个人建议不要去读什么大厚书,学会 Google 比什么都重要。
    wizardforcel
        13
    wizardforcel  
       2015-11-17 08:50:51 +08:00 via Android
    1. 没接触过的话 绝对是 c#开发效率更高

    2. wpf 是用来做特效的 不要求特别炫酷的话还是 winform 比较好 wpf 在小内存机子上比较卡

    3. c#的坑屈指可数 目前我认为唯一的坑就是轮子少 以及平台的问题。

    4. 这个要看版本 比如说你用的特性都是 c#4 里面的 c#5 新增的特性用的很少 而他是 2010 年推出的 那么看 2010 年之后的书就没问题
    weizhiyao008
        14
    weizhiyao008  
       2015-11-17 09:06:37 +08:00
    2013 年以后 C#比较大的更新就 async/await 异步同步,这特性其实用的挺少的,如果不是特别感兴趣的话, 2013 的资料完全够用
    weizhiyao008
        15
    weizhiyao008  
       2015-11-17 09:10:07 +08:00
    不对,好像说错了, 2013 年.NET 4.5 已经发布了, async/await 已经有了
    qinxi
        16
    qinxi  
       2015-11-17 09:10:50 +08:00
    java 是世界上最好的语言:) 哈哈哈哈哈
    sun2920989
        17
    sun2920989  
       2015-11-17 09:50:40 +08:00
    uwp 考虑么 最近在学
    min
        18
    min  
       2015-11-17 10:02:08 +08:00
    wpf 或者 uwp ,语言 C#
    g00001
        19
    g00001  
       2015-11-17 11:03:16 +08:00
    如果不是想专业从事桌面软件行业,这些东西都太重了,学习成本高,开发工期长...没有那么美好的。
    桌面软件跨平台意义不是很大,非 win 的系统的市场占有率基本可以忽略,跨平台是有代价的。一是体积大,二个是需要考虑的环境因素太多不可避免的搞的更复杂,三是不能发挥专用平台的优势。

    有 PHP,JS 的基础,想快速搞些桌面软件,最方便的就是 aardio ,分分钟就能撸出个象样的程序来,分分钟就能找到感觉。即使是原来就会 C#,C++这些会点 aardio 也是不错的, aardio.org 的站长就是十几年的 C#程序员,人家用 aardio 写了个 ERP 企业管理系统,服务端客户端全部用 aardio 开发。

    而且 aardio 里调用什么其他的都很方便,几句代码嵌入个 webkit ,几句代码嵌入个 webbrowser ,直接调用 C#,Java,C,Js,PHP...... 虽然拥有这么多的功能,但是 aardio 的开发环境却只有 6.5MB ,简单、小巧、粗暴!

    随便几句代码找下感觉

    import win.flashBox
    var flash = win.flashBox(text="aardio Form";right=599;bottom=399)
    flash.movie = "http://update.aau.cn/aardio/samples/transparent.swf";

    flash.show()
    win.loopMessage();

    没错,五句代码就可以生成一个简单的、但完整的窗口程序、一个桌面透明的 FLASH 动画窗口。
    msg7086
        20
    msg7086  
       2015-11-17 12:17:41 +08:00
    @g00001 其实光最后那句消息循环,拿出来就可以讲好久了。
    ===
    我学 C#的时候就是自己随便挑了个项目写了个开源软件,维护了 2 年,期间重构了一次,重新设计了多次,后来因为发展方向变了所以就弃坑了,把源码都交给了一个医务工作者朋友,现在由他来维护,到现在已经 8 年多了。
    VmuTargh
        21
    VmuTargh  
       2015-11-17 12:20:03 +08:00 via Android
    C#/F# MSDN , wpf 不错
    feuvan
        22
    feuvan  
       2015-11-17 12:26:06 +08:00
    想知道 windows 桌面基础的话就看 windows internals
    实用就 C# + winform 吧。。。别跟自己过不去。
    wpf 是个坑
    inoris
        23
    inoris  
       2015-11-17 12:39:00 +08:00
    如果想做出能 /好 /耐看的界面,还是 WPF 吧, WinForm 已经是过去时了。最新版的《 C# 高级编程》和 O'Reilly 的《 WPF 编程》都是不错的参考书。跟着视频什么的学都是低效的方法,开个坑做点东西,然后不断维护优化,遇到问题多翻书多 Google 多记录心得。
    bombless
        24
    bombless  
       2015-11-17 12:40:05 +08:00 via Android
    还以为说 win32
    inoris
        25
    inoris  
       2015-11-17 12:45:49 +08:00
    不过入了 MS 的这一套坑,出路会比较窄,除了不知道前景如何的 UWP 也就是写服务器了。但是掌握了 Windows 下尤其是 VS 的这一套 GUI 开发工具,有需要时鼓捣个小工具什么的给自己用也不错。:)

    BTW ,这个在全角 / 半角之间插入空格的功能好像有点残疾。
    glchaos
        26
    glchaos  
       2015-11-17 12:51:24 +08:00
    @msg7086 赞同,从这 TM 就是一坨,到这 TM 是一团
    Banio
        27
    Banio  
       2015-11-17 13:11:51 +08:00
    要是在 win 下 做 win 窗口开发程序 我觉得 没有比 C#更方便的了 QT 我觉得 还不是很给力
    g00001
        28
    g00001  
       2015-11-17 14:05:07 +08:00
    具体还是要看做什么桌面软件, 脱离应用场景讲谁最好用都是不负责。
    每种语言都有优劣,都有适不适合干的事。你要是做个 office 那样的 MDI 界面,那用 MFC 最方便,点三两下就全给你生成好了。

    再或者说你要是很在乎体积,用 QT 就不太好了,太大了!
    QT 在很多时候真不如 VC6 , VC6 是唯一所有 WIN 系统自带的系统运行库,所以 VC6 生成的软件非常的小。
    当然如果不在乎发布后的体积,又热爱 C++那种虐心的欲哭无泪的感觉,那用 QT 也不错。

    要是不想被别人反编译出源代码,这用 C#以前就要先冷静一下了 ,先看看 CSDN 这几天的一个帖子 《欲哭无泪, Winform 程序轻轻松松被人反编译了......》 http://bbs.csdn.net/topics/391855626 C#生成的 EXE 也就是个源代码压缩包差不多,一堆的工具可以直接还原出源代码(包括工程文件)。

    其实 C#做些小东西还真不如 python ,但如果你是想生成 EXE 文件,方便传播和发布,唉, python 做这个事就老头痛了,很多包很麻烦,生成 EXE 很多坑,尤其是用 python 做个窗口界面啥的要搞的老漂亮啥的还是老麻烦的。

    象我这种没追求的人,就比较喜欢即可以偷懒又省事马上就能看到效果的 aardio
    自行车虽然没有房车那么大那么美,但好在简单实用操作方便。
    threezhiwang
        29
    threezhiwang  
       2015-11-17 17:16:27 +08:00
    QT 直接的 不犹豫
    我还 TM 的要转 web 呢
    xxzs
        30
    xxzs  
       2015-11-17 20:49:02 +08:00
    现在没人学 Win32/MFC 了吗?
    F32
        31
    F32  
       2015-11-17 21:32:04 +08:00
    刚想说‘难道只有我一个人推荐从 Win32 SDK 入门吗’,结果发现楼上还有一个
    @xxzs 握爪 :)
    相关书籍: Windows 程序设计、 Windows 核心编程
    wzqt
        32
    wzqt  
       2015-11-17 23:04:38 +08:00 via iPhone
    为什么没人考虑 Qt 写前台,其他语言写后台,分工明确,结构清晰,还可以避免 Qt 体积过大的缺点
    wzqt
        33
    wzqt  
       2015-11-17 23:23:49 +08:00 via iPhone
    Vue.js + Electron 也是个不错的选择
    flyingfz
        34
    flyingfz  
       2015-11-17 23:37:15 +08:00
    node-webkit , 貌似现在改名了。
    dofy
        35
    dofy  
       2015-11-18 15:56:21 +08:00
    简单点的玩玩 autohotkey 就够了
    NitroXenon
        36
    NitroXenon  
       2015-11-18 22:01:58 +08:00 via Android
    @g00001 我有看过用 Themida/Winlicense obfuscate 的, de4dot 无法直接拆,好像要手动拆,很麻烦,所以用 Themida/Winlicense obfuscate 一下就难以被反啦~
    ragnaroks
        37
    ragnaroks  
       2015-11-19 10:10:39 +08:00
    上手 C#容易,结合 UPW/WPF 很容易做 GUI 程序.
    当然坑爹的地方就是内存了,貌似作为外部引入的部分是不会自动释放内存的(比如按钮用 http://adc.com/button.png)
    有 C/C++基础建议还是 Qt
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2356 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 15:56 PVG 23:56 LAX 08:56 JFK 11:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86