V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tlin
V2EX  ›  C

我想用 C 语言开发一个有操作界面的程序,就像一些通用 exe 程序一样,网上有没有好的资料示例可学习?

  •  
  •   Tlin · 2021-01-20 19:04:45 +08:00 · 7190 次点击
    这是一个创建于 1408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就跟普通的 PC 程序一样,能够安装在电脑上,上面有一些操作按钮、输入框等等

    69 条回复    2021-01-22 13:41:51 +08:00
    loading
        1
    loading  
       2021-01-20 19:07:35 +08:00 via Android   ❤️ 1
    关键字:c 语言 gtk
    yishengD
        2
    yishengD  
       2021-01-20 19:10:48 +08:00
    《 Windows 程序设计(第 5 版+珍藏版)》
    ysc3839
        3
    ysc3839  
       2021-01-20 19:13:42 +08:00 via Android   ❤️ 2
    建议放弃 C,去学 C++,然后用 Qt 开发。
    SuperMild
        4
    SuperMild  
       2021-01-20 19:18:19 +08:00
    C 也是有一些 GUI 库,但用起来应该不会好用。一般如果需要跨平台,应选择 Qt 或 Electron 或 Java, 如果只是 win 可以选择 .Net 或 AHK

    另外 python 有好几个简单的 GUI 库,应该都会比 C 好用一些。
    northisland
        5
    northisland  
       2021-01-20 19:18:43 +08:00
    c 不是做 ui 的,

    要弄可以试一下 swift,和 c 对接功能超容易,接口都不用写。
    Tlin
        6
    Tlin  
    OP
       2021-01-20 19:18:45 +08:00
    @ysc3839 哈哈 没接触过 C++,不知坑怎样。
    Tlin
        7
    Tlin  
    OP
       2021-01-20 19:20:21 +08:00
    @SuperMild 发觉自己傻了 忘记了 Python
    stirlingx
        8
    stirlingx  
       2021-01-20 19:20:28 +08:00
    MFC 侯杰
    SuperMild
        9
    SuperMild  
       2021-01-20 19:24:43 +08:00
    @Tlin python 里最最易学的是 appJar, 可能是世界上最易学易用的 GUI 库,缺点是界面非常简陋。
    ysc3839
        10
    ysc3839  
       2021-01-20 19:40:11 +08:00 via Android
    @Tlin 我认为 C 的坑更多。比如说 C 没有 RAII,需要自己手动释放。
    hoyixi
        11
    hoyixi  
       2021-01-20 19:41:11 +08:00
    你需要一个 GUI 库
    thedrwu
        12
    thedrwu  
       2021-01-20 20:33:14 +08:00 via Android   ❤️ 1
    其实 win32api ( user32.dll )小巧又好用,C 语言就够,linux 下能轻易地移植到 libwine 。Dialog 也能直接画。
    laminux29
        13
    laminux29  
       2021-01-20 20:37:49 +08:00
    C/C++开发 GUI 类型的项目,选 QT,无论是对于工程、可实现性、学习性以及以后工作发展,综合性价比都是最高的。
    AndyAO
        14
    AndyAO  
       2021-01-20 20:38:07 +08:00
    如果你只在 Windows 上用的话,那么就应该调用 Win32Api 直接进行绘制.

    所以上面几位提到的关于 Windows 的书籍很值得看, 配合官方文档基本上就够了.

    还有就是目前 windows 开发建议使用 C++而不是 C(上面提到的 MFC 是对 Win32Api 的 C++封装),因为 Visual Studio 实质上只支持 C++,当然 C 也被兼容,不过用 C 会遇到各种各样的问题.
    AndyAO
        15
    AndyAO  
       2021-01-20 20:39:04 +08:00
    你的描述来看,那应该是相当简单的界面,如果比较复杂的话,那就不建议直接调用 Win32API(包括 MFC),因为对于复杂的界面,这种方式不仅实现繁琐,而且效率还比较差,这个时候应该考虑使用 QT 等等.
    Jirajine
        16
    Jirajine  
       2021-01-20 20:41:09 +08:00 via Android   ❤️ 1
    可以看看 winui3.0
    ayase252
        17
    ayase252  
       2021-01-20 20:43:12 +08:00 via iPhone
    🤔为什么要用 C 写 GUI ?
    AndyAO
        18
    AndyAO  
       2021-01-20 20:44:08 +08:00
    非 Win32API 的 GUI 方案可以称为 DirectUI,没有使用标准的控件,绘制的内容是由程序本身完全控制,如果调用 Win32API,那么其中的内容是系统接管的,这就导致在显示复杂内容的时候效率上比较差.

    当好处也显而易见,非常简单轻便,而且精确操作控件的 API 很多.
    love
        19
    love  
       2021-01-20 23:06:09 +08:00   ❤️ 1
    gtk,且垮平台。 如果直接用 winapi 写界面是会死人的非常繁复。
    lovestudykid
        20
    lovestudykid  
       2021-01-21 00:51:26 +08:00
    https://easyx.cn/ 这个简易的库应该可以满足你的要求
    rpish
        21
    rpish  
       2021-01-21 01:10:53 +08:00
    MFC
    12tall
        22
    12tall  
       2021-01-21 08:30:57 +08:00
    小甲鱼 Win32 系列还可以的
    Cbdy
        23
    Cbdy  
       2021-01-21 08:44:59 +08:00 via Android   ❤️ 1
    gtk
    Cloutain
        24
    Cloutain  
       2021-01-21 08:54:48 +08:00
    C++写 只推荐 Qt
    但是写 windows 窗口程序,不推荐 C/C++
    C#是首选
    itfanr
        25
    itfanr  
       2021-01-21 09:04:51 +08:00
    c++ wxwidget/qt
    shuax
        26
    shuax  
       2021-01-21 09:08:52 +08:00
    wtl
    Quarter
        27
    Quarter  
       2021-01-21 09:13:24 +08:00
    c 语言的话用 Qt ?
    towry
        28
    towry  
       2021-01-21 09:15:30 +08:00
    直接 rust
    nnnToTnnn
        29
    nnnToTnnn  
       2021-01-21 09:19:54 +08:00
    @northisland #5 C不是做 UI 的? 那么著名的 GTK 项目诞生的原因是什么?
    zwy100e72
        30
    zwy100e72  
       2021-01-21 09:27:05 +08:00
    @nnnToTnnn #29

    如果问 C 能不能做 UI,应该是能做。如果问 C 做 UI 是不是最佳选择(之一),我认为不是。
    northisland
        31
    northisland  
       2021-01-21 09:31:56 +08:00
    @nnnToTnnn 现在谁用 c 做 ui 。。。1998 年么?
    ml1344677
        32
    ml1344677  
       2021-01-21 09:34:43 +08:00
    我记得我大一刚学计算机的时候,是在如鹏网上看杨中科的视频学的 gtk,当时说实话,蛮激动的。。6 、7 年前的事了
    bbsabc2
        33
    bbsabc2  
       2021-01-21 09:39:21 +08:00
    C 做 UI,在 windows 系统下大体思路是这样的。

    registerclass
    createwindow

    然后每一个控键都要 createwindow

    还需要一个 message 循环

    基本上就可以了
    encro
        34
    encro  
       2021-01-21 09:42:55 +08:00
    当然是用 c#,winform 或者 wpf 。
    qt 也行。
    djoiwhud
        35
    djoiwhud  
       2021-01-21 09:44:18 +08:00 via Android
    c 做 ui,那你得直接用 opengl 才行。上面有人提的 createwindow 是 cpp 。
    XIVN1987
        36
    XIVN1987  
       2021-01-21 09:45:54 +08:00
    建议 PyQt,,Python 容易学,,写好后可以打包成一个 xx.exe 分发
    northisland
        37
    northisland  
       2021-01-21 09:49:08 +08:00
    @nnnToTnnn

    gtk 以及 gimp,能做出来并在主流平台上都能运行,简直是奇迹。

    不晓得今天有多少人还能动的了 gimp 的逻辑。
    XIVN1987
        38
    XIVN1987  
       2021-01-21 09:49:32 +08:00
    我用 PyQt 写过几个小工具,,可以看看效果: https://github.com/XIVN1987?tab=repositories
    zhuangzhuang1988
        39
    zhuangzhuang1988  
       2021-01-21 10:01:11 +08:00
    @yishengD 同意真正的好书, 大而全而且细节多.
    kios
        40
    kios  
       2021-01-21 10:12:50 +08:00
    首选 Qt
    azcvcza
        41
    azcvcza  
       2021-01-21 10:17:45 +08:00
    gtk 写得人蛋疼
    LokiSharp
        42
    LokiSharp  
       2021-01-21 10:19:24 +08:00
    GUI 直接 C# .net 吧
    zengming00
        43
    zengming00  
       2021-01-21 10:33:28 +08:00
    SDL 是个不错的跨平台库,用 C 语言写也很简单,只是很多组件都没有
    zjsxwc
        44
    zjsxwc  
       2021-01-21 10:35:56 +08:00
    c++ 的不少,
    c 的就少了,资料多的只有 gtk 了,

    当然也可以用 win32api 自己撸界面,就是特别麻烦



    还有一些奇葩手段,比如嵌入 tcl/tk, python 自带的 tkinter 估计是这种操作
    http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15612-s97/class/wallace/project/src/et/doc/ET.html#H0002
    zjsxwc
        45
    zjsxwc  
       2021-01-21 10:36:20 +08:00
    nnnToTnnn
        46
    nnnToTnnn  
       2021-01-21 13:40:49 +08:00
    @zwy100e72 #30L

    C 确实是做 UI 的最佳选择之一。UI 分为很多页面。 细分领域

    1. 网页
    2. Window 平台
    3. Linux 平台
    4. Mac 平台
    5. 安卓平台
    6. IOS 平台
    7. 可穿戴设备(手环,手表,智能眼镜)
    8. 智能家居设备(例如 冰箱,空调,还有洗衣机)

    C 语言可能在其他领域里面没有写的快。 但是 C 是唯一一个覆盖所有领域的 UI 界面。

    并且 C 是唯一一个在所有领域中能保证你程序运行高效的语言,无天花板( PS:天花板取决于你的技术能力)

    -----------

    如果只是说做 UI,你随便举个语言看能不能做到以下几点 。 居然说 C 不是做 UI 的最佳选择之一,我认为如果真的是为了做 UI,那么 C 才是最佳的选择之一。
    Kasumi20
        47
    Kasumi20  
       2021-01-21 13:45:30 +08:00
    Dialog
    nnnToTnnn
        48
    nnnToTnnn  
       2021-01-21 13:46:42 +08:00
    厉害点的项目就是 gnome 系列产品,你可以了解下 GTK 的项目,基本上每个都是大作
    guochao
        49
    guochao  
       2021-01-21 13:48:40 +08:00
    C 可以做 UI,但是 C 没有类型导致有些东西做起来没有那么方便,比如说继承啊什么的,就很难搞。

    然后 UI 分两类吧,你要是想用其他人写好的绘制的控件,目前我看到的勉勉强强能跨平台的,就是 gtk 。像楼上说的用 api 撸,比如说 win32 api 或者 x server 的,可以是可以,没必要。其他的库,不跨平台的,我也没看到有啥更好的选择。

    如果是打算搞自绘 UI,那可以用 SDL2 或者类似的 SDK 。比如说就用 SDL2,或者用 glfw+opengl 。这也是一条路。但是就是看起来不是那么 native 。

    如果你打算写写 c++,或者写写 c 风格的 c++,那选择就多了,无论是 MFC 还是 Qt 还是 wx 还是什么其他的,做界面都好说。
    guochao
        50
    guochao  
       2021-01-21 13:50:27 +08:00
    另外也可以考虑写命令行下的 UI,比如说 ncurses,c 和 python 都有,也挺好使的。
    James369
        51
    James369  
       2021-01-21 13:52:32 +08:00
    @nnnToTnnn 你写了这么多平台,估计也就嵌入式会用 C 来做 UI 的吧。
    不建议用 C 来做 UI,比如事件驱动,多态都不好表现
    nnnToTnnn
        52
    nnnToTnnn  
       2021-01-21 14:10:33 +08:00
    @James369 #51 并不是,看情况,嵌入式首选 C, 其他平台基本上都是混合开发,例如 GTK 的 webkit + html .

    如果只是小工具不复杂,那么基本上就是 GTK , 安卓和 ios 平台也是差不多的做法。


    HTML 网页在布局上面有很大优势。
    ysc3839
        53
    ysc3839  
       2021-01-21 15:31:36 +08:00 via Android
    @nnnToTnnn #46 C 语言没法覆盖 macOS 和 iOS,因为这两个系统提供的 API 都是基于 Objective-C 的,没法绕开 objc 相关的特性。
    相反,Windows 的 WinRT API 还是基于 COM 的,COM 的底层 ABI 是函数指针,C 语言仍然可以调用。
    bignullnull
        54
    bignullnull  
       2021-01-21 15:33:10 +08:00
    SDL2,近期在研究用 C 写游戏
    aneostart173
        55
    aneostart173  
       2021-01-21 16:03:00 +08:00
    C 本来就不是写 GUI 用的。硬要写也没问题,那是非常痛苦。另外写 GUI 本身也是分很多层次,比如一个按钮都要自己绘制的话,相当于你先写了个 GUI 库。
    edwinxe2v
        56
    edwinxe2v  
       2021-01-21 16:56:46 +08:00
    做 GUI,用 FreePascal 快得多,也是跨平台的: https://www.lazarus-ide.org/
    zfzyk
        57
    zfzyk  
       2021-01-21 16:57:39 +08:00
    直接易语言
    songer
        58
    songer  
       2021-01-21 17:12:41 +08:00
    iup 原生控件,windows 下就是 win api , Linux 下就是 GTK
    lingo
        59
    lingo  
       2021-01-21 17:46:15 +08:00
    python 的 tk 。。。

    之前想尝试用 go,就很难受。
    weiqk
        60
    weiqk  
       2021-01-21 20:30:45 +08:00 via Android
    忘本的程序员真多,你们写的代码影响到别人的国家安全了还不知道反思么?
    Tlin
        61
    Tlin  
    OP
       2021-01-21 21:30:19 +08:00
    @weiqk 别那么气,一般人写的代码连一个用户都威胁不到,当然坏心思的也有多。但是影响到国家那可不是一般人能做的。
    Tlin
        62
    Tlin  
    OP
       2021-01-21 21:31:26 +08:00
    谢谢各位 我用 Python 写写 后面渐渐的学习 Python
    mmdsun
        63
    mmdsun  
       2021-01-21 21:55:00 +08:00 via Android
    EXE ? 是 Windows 应用程序吗?
    看这个,里面有 C/C++

    https://developer.microsoft.com/zh-cn/windows/get-started-windows-10/
    c0py7hat
        64
    c0py7hat  
       2021-01-21 22:08:18 +08:00 via iPhone
    c#,写小工具 脚本 还是易语言吧 上手快
    LZSZ
        65
    LZSZ  
       2021-01-21 22:26:15 +08:00
    c#不香吗
    likai
        66
    likai  
       2021-01-21 23:08:27 +08:00 via Android
    c 语言界面库,我记得有一个 lcui 的好像是,
    xcstream
        67
    xcstream  
       2021-01-21 23:24:56 +08:00
    用 devc++ 建一个 win32 c 项目

    windows api 本身就是 c 接口的
    buzailianxi
        68
    buzailianxi  
       2021-01-22 10:39:06 +08:00
    qt
    vacants
        69
    vacants  
       2021-01-22 13:41:51 +08:00 via iPhone
    quick macros 很香,建议试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3222 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:06 · PVG 21:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.