Winform用C语言开发,可行吗?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 C语言 正文

这是一个非常经典的话题,但首先需要明确一个关键点:

winform c语言
(图片来源网络,侵删)

**核心概念:C# vs. C++

  • WinForms (Windows Forms) 是一个由微软开发的图形用户界面框架。
  • 这个框架主要和 C# 语言绑定,当你使用 Visual Studio 创建 "Windows Forms App" 项目时,默认使用的语言就是 C#。
  • C 语言本身没有原生的、官方的 WinForms 支持,C 语言是一种过程式语言,而 WinForms 是一个基于 .NET Framework 的面向对象的框架。

当人们说“用 C 语言做 WinForms”时,通常有以下几种情况:

  1. 最常见的情况(实际上不是 C 语言): 用户可能混淆了 C 和 C#,他们想说的是用 C# 来写 WinForms 程序,这是最标准、最推荐的方式。
  2. 使用 C++/CLI: C++ 有一个扩展叫做 C++/CLI (Common Language Infrastructure),它允许你在 C++ 代码中使用 .NET 框架,包括 WinForms,这是一种混合模式,可以同时使用非托管的 C++ 代码和托管的 .NET 代码。
  3. 使用第三方库(C 语言): 存在一些第三方库,试图用纯 C 语言模仿 WinForms 的 API,让你能用 C 的语法来创建窗口和控件,但这并不是微软官方的 WinForms,功能和生态都远不如 C# 版本。

用 C# 开发 WinForms(最推荐的方式)

这应该是你真正想学习的,C# 和 WinForms 是天作之合,非常适合快速开发 Windows 桌面应用。

环境准备

你需要安装 Visual Studio,社区版是免费的,完全足够个人学习和开发。

创建你的第一个 WinForms 项目

  1. 打开 Visual Studio。
  2. 点击 “创建新项目”。
  3. 在模板搜索框中输入 Windows Forms,然后选择 “Windows 窗体应用 (.NET Framework)”“Windows 窗体应用” (.NET 5/6/7/8 版本,推荐新版)。
  4. 给你的项目起个名字,MyFirstWinApp,然后点击 “创建”。

Visual Studio 会为你生成一个基本的项目结构,并自动打开一个名为 Form1 的窗体设计器。

winform c语言
(图片来源网络,侵删)

理解项目结构

  • Form1.cs: 这是你的窗体的 C# 代码文件,它定义了窗体的行为(逻辑)。
  • Form1.Designer.cs: 这是窗体的自动生成代码文件,它包含了所有你在设计器中拖放的控件(如按钮、文本框)的初始化代码。一般情况下,你不需要手动修改这个文件。
  • Program.cs: 这是应用程序的入口点。static void Main 方法在这里,负责启动你的应用程序并创建主窗体。

一个简单的例子:Hello, WinForms!

让我们创建一个简单的应用,包含一个文本框和一个按钮,点击按钮后,文本框的内容会改变。

步骤 1:使用设计器添加控件

  1. 从 Visual Studio 的 “工具箱” (Toolbox) 中,拖拽一个 TextBox 控件到 Form1 窗体上。
  2. 再拖拽一个 Button 控件到窗体上。
  3. 选中 Button,在 “属性” (Properties) 窗口中,找到 Text 属性,将其值改为 “点击我”。
  4. 选中 TextBox,在 “属性” 窗口中,找到 (Name) 属性,将其值改为 txtDisplayText 属性清空。

步骤 2:编写事件处理代码

  1. 双击 “点击我” 按钮,Visual Studio 会自动切换到 Form1.cs 文件,并为你生成一个按钮点击事件的空方法,如下所示:

    using System;
    using System.Windows.Forms;
    namespace MyFirstWinApp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void btnClickMe_Click(object sender, EventArgs e)
            {
                // 在这里编写按钮被点击后要执行的代码
            }
        }
    }
  2. btnClickMe_Click 方法中,编写如下代码:

    private void btnClickMe_Click(object sender, EventArgs e)
    {
        // 将文本框的内容设置为 "你好,世界!"
        txtDisplay.Text = "你好,世界!";
    }

步骤 3:运行程序

F5 键,或者点击工具栏上的绿色 “播放” 按钮,程序会启动,你将看到一个窗口,点击 “点击我” 按钮,文本框里就会出现 “你好,世界!”。

这就是 WinForms 开发的基本流程:拖拽控件 + 编写事件处理代码


用 C++/CLI 开发 WinForms

如果你因为某些原因(比如需要调用遗留的 C++ 库)而必须使用 C++,C++/CLI 是一个选择。

环境准备

同样需要 Visual Studio,并且安装 “使用 C++ 的桌面开发” 工作负载。

创建项目

  1. 创建新项目。
  2. 搜索 CLR,选择 “CLR 空项目”
  3. 添加一个新项,选择 “Windows 窗体 (.NET)”,这会为你生成一个窗体文件。

一个简单的 C++/CLI 例子

代码风格和 C# 非常相似,但语法是 C++ 的。

MyForm.h (头文件)

#pragma once
#include <windows.h>
#include <msclr\auto_gcroot.h> // 用于在非托管 C++ 中托管 .NET 对象
// 使用 .NET 命名空间
using namespace System;
using namespace System::Windows::Forms;
// 定义我们的窗体类
public ref class MyForm : public Form
{
public:
    MyForm();
private:
    // 声明控件
    TextBox^ txtDisplay;
    Button^ btnClickMe;
    // 声明事件处理方法
    void btnClickMe_Click(Object^ sender, EventArgs^ e);
};

MyForm.cpp (实现文件)

#include "MyForm.h"
MyForm::MyForm()
{
    // 初始化窗体
    this->Text = "C++/CLI WinForms 示例";
    this->Size = System::Drawing::Size(300, 200);
    // 创建并配置文本框
    txtDisplay = gcnew TextBox();
    txtDisplay->Location = System::Drawing::Point(20, 20);
    txtDisplay->Size = System::Drawing::Size(260, 20);
    this->Controls->Add(txtDisplay);
    // 创建并配置按钮
    btnClickMe = gcnew Button();
    btnClickMe->Text = "点击我";
    btnClickMe->Location = System::Drawing::Point(20, 60);
    btnClickMe->Size = System::Drawing::Size(260, 30);
    // 绑定事件
    btnClickMe->Click += gcnew EventHandler(this, &MyForm::btnClickMe_Click);
    this->Controls->Add(btnClickMe);
}
void MyForm::btnClickMe_Click(Object^ sender, EventArgs^ e)
{
    txtDisplay->Text = "你好,来自 C++/CLI!";
}

main.cpp (入口点)

#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
// 程序的入口点
int main(array<String^>^ args)
{
    // 启动窗体应用程序
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);
    Application::Run(gcnew MyForm());
    return 0;
}

C++/CLI 的语法比 C# 复杂,因为它混合了托管和非托管世界的概念,但对于需要桥接两者的情况非常有用。


总结与对比

特性 C# + WinForms C++/CLI + WinForms 纯 C 语言 (第三方库)
语言 C# (面向对象) C++/CLI (混合) C (过程式)
官方支持 是,完全支持 是,但为 C++ 设计 否,第三方库
开发效率 非常高,简单易学 较高,但比 C# 复杂 较低,功能受限
性能 良好 (JIT 编译) 极高 (可调用非托管代码) 高 (直接编译为机器码)
主要用途 快速开发 Windows 桌面应用、工具软件 需要结合现有 C++ 库的 GUI 项目 教学、嵌入式 GUI 或特定领域
推荐度 ⭐⭐⭐⭐⭐ (首选) ⭐⭐⭐ (特定场景) ⭐ (不推荐)

结论与建议

对于绝大多数 Windows 桌面应用开发需求,请直接使用 C# 和 WinForms,它是微软官方提供的、功能最完善、学习资源最丰富、开发效率最高的组合。

如果你是 C 语言学习者,想了解 Windows 界面编程,可以先从 Win32 API 开始,这是最底层、最纯粹的 Windows 窗口编程方式,能让你深刻理解窗口消息机制,当你掌握了 Win32 API 后,再回头看 C# WinForms,会感觉它就像一个帮你把所有复杂事情都做好的高级工具箱。

学习路径建议:

  1. 如果你是初学者,目标是快速做出应用:

    • 直接学习 C# + WinForms,这是最直接、最高效的路径。
  2. 如果你是 C/C++ 程序员,需要调用现有库:

    • 学习 C++/CLI,用它来创建 WinForms 界面,并在其中调用你的 C/C++ 代码。
  3. 如果你想深入理解 Windows 系统本身:

    • 学习 C 语言 + Win32 API,这会非常辛苦,但收获也最大,能让你明白 GUI 程序背后的原理。
-- 展开阅读全文 --
头像
dede高级搜索页面
« 上一篇 04-18
dede目录权限检测如何正确设置与排查?
下一篇 » 04-18

相关文章

取消
微信二维码
支付宝二维码

目录[+]