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

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

  •  
  •   Tlin Jan 20, 2021 8214 views
    This topic created in 1942 days ago, the information mentioned may be changed or developed.

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

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

    另外 python 有好几个简单的 GUI 库,应该都会比 C 好用一些。
    northisland
        5
    northisland  
       Jan 20, 2021
    c 不是做 ui 的,

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

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

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

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

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

    registerclass
    createwindow

    然后每一个控键都要 createwindow

    还需要一个 message 循环

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

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

    不晓得今天有多少人还能动的了 gimp 的逻辑。
    XIVN1987
        38
    XIVN1987  
       Jan 21, 2021
    我用 PyQt 写过几个小工具,,可以看看效果: https://github.com/XIVN1987?tab=repositories
    zhuangzhuang1988
        39
    zhuangzhuang1988  
       Jan 21, 2021
    @yishengD 同意真正的好书, 大而全而且细节多.
    devtk
        40
    devtk  
       Jan 21, 2021
    首选 Qt
    azcvcza
        41
    azcvcza  
       Jan 21, 2021
    gtk 写得人蛋疼
    LokiSharp
        42
    LokiSharp  
       Jan 21, 2021
    GUI 直接 C# .net 吧
    zengming00
        43
    zengming00  
       Jan 21, 2021
    SDL 是个不错的跨平台库,用 C 语言写也很简单,只是很多组件都没有
    zjsxwc
        44
    zjsxwc  
       Jan 21, 2021
    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
    nnnToTnnn
        46
    nnnToTnnn  
       Jan 21, 2021
    @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  
       Jan 21, 2021
    Dialog
    nnnToTnnn
        48
    nnnToTnnn  
       Jan 21, 2021
    厉害点的项目就是 gnome 系列产品,你可以了解下 GTK 的项目,基本上每个都是大作
    guochao
        49
    guochao  
       Jan 21, 2021
    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  
       Jan 21, 2021
    另外也可以考虑写命令行下的 UI,比如说 ncurses,c 和 python 都有,也挺好使的。
    James369
        51
    James369  
       Jan 21, 2021
    @nnnToTnnn 你写了这么多平台,估计也就嵌入式会用 C 来做 UI 的吧。
    不建议用 C 来做 UI,比如事件驱动,多态都不好表现
    nnnToTnnn
        52
    nnnToTnnn  
       Jan 21, 2021
    @James369 #51 并不是,看情况,嵌入式首选 C, 其他平台基本上都是混合开发,例如 GTK 的 webkit + html .

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


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

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

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

    windows api 本身就是 c 接口的
    buzailianxi
        68
    buzailianxi  
       Jan 22, 2021
    qt
    vacants
        69
    vacants  
       Jan 22, 2021 via iPhone
    quick macros 很香,建议试试
    About     Help     Advertise     Blog     API     FAQ     Solana     1554 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 185ms UTC 16:46 PVG 00:46 LAX 09:46 JFK 12:46
    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