c++用WinForm做界面的实现

2023-05-16

        以前是做C#的,对Winform情有独钟,最近想转C++,想把以前的一些Delphi转成c++,MFC我不熟而且用起来相当烦效果又丑,GTK图形库用起来太麻烦,琢磨着研究一下WInform前台,C++做后台的方法,谷歌了一下,没看到什么中国资料,我草,我以前看过的啊,找来找去,找到一篇英文的,写得太纠结,我结合自己使用的经验,重新整理一下,言简意赅,简明易懂。谨供新人参考,老鸟勿拍。
      
  1. 首先打开你的VS2005
  2. 依次点击菜单栏的文件-->新建-->项目
  3. 在左边的语言列表选里,选择C++分支下的CLR,然后在右边单击“CLR 空项目”
  4. 在名称框里输入Exercise2:
  5. 点击“OK”,创建项目成功。
  6. 好了,这只是创建了好了一个托管C++项目,要使用WINFORM,我们要引入相关的.NET组件。
  7. 在vs主界面上依次点击菜单栏的项目-->"引用";
  8. 在弹出的子窗口中选择添加新引用;
  9. 在.NET标签页下选择System,点确定,再点击添加新应用,在.NET标签页下选择System.Window.Forms,然后确定,如图
  10. 都完成后,应该像这样,然后点击确定
  11. 创建一个新的类,点击VS主界面菜单栏的项目-->添加类;
  12. 在弹出的子窗体右边选择C++类,点确定,会出现添加类向导,在类名中输入CExercise,基类中填Form
  13. 然后我们来到自动生成的头文件代码中,添加System和Form的引用,修改后的文件应该如下
  14.  1
     2 #pragma once
     3
     4 using   namespace  System;
     5 using   namespace  System::Windows::Forms;
     6
     7 public   ref   class  CExercise :  public  Form
     8 {
     9public:
    10    CExercise(void);
    11}
    ;

    然后我们要创建一个主程序来调用这个类。这个大家应该都比我熟的,右击源文件文件夹,点击添加-->新建项,选择CPP文件,代码如下:
  15.  1
     2
     3 #include  < windows.h >
     4 #include  " Exercise.h "
     5
     6 int  APIENTRY WinMain(HINSTANCE hInstance,
     7              HINSTANCE hPrevInstance,
     8              LPSTR lpCmdLine,
     9               int  nCmdShow)
    10 {
    11    Application::Run(gcnew CExercise());
    12
    13    return 0;
    14}

    含义我不多说了,把那个Cexercise换成你自己别的名字的类就可以运行那个类了,当然了,要注意包含头文件。点击运行看看,一个白白的窗体,对吗,好的,革命成功迈出了坚实的一步。
  16. 下面我们来试着添加一个button按钮,修改Exercise.cpp的代码如下
  17. 1
    2 #include  " Exercise.h "
    3
    4 CExercise::CExercise( void )
    5 {
    6    System::Windows::Forms::Button^  button1=gcnew Button;//创建按钮
    7    this->Controls->Add(button1);//把按钮附加到我们的窗体上
    8}

    9

    在运行看看,应该像这样
  18. 然后如果你还想继续给这个按钮添加文字设置尺寸什么的,你可以通过像这样的代码,具体我不说多少,因为选择Winform就是看中快速的控件拖拉功能,都是手写我还不如用GTK
  19. this -> button1 -> Name  =  L " button1 " ;//设置按钮文字
    this -> button1 -> Size  =  System::Drawing::Size( 75 23 );//设置按钮尺寸

  20. 好了,下面重点来了,如何像C#一样自由地拖拉控件改属性呢,我们右击项目,选择添加-->新建项。
  21. 在弹出的子窗体右边选择Windows窗体,输入一个名字,比如“HelloWorld”,点击确定
  22. 然后我们就欣喜的发现,哇,又回到Winform拖拉控件的时代啦,是的,没错,而且我们可以以C++写后台。没用过c#的朋友请在界面上找找工具箱,实在没找到请依次点击主窗体上菜单栏的视图-->工具箱,然后从工具箱里找到一个button控件拖动到主窗体上。
  23. 之后双击这个button,会自动添加一个button的单击事件,我们希望单击的时候弹出一个“我是傻逼”的消息框,代码如下:
  24. 1      private : System::Void button1_Click(System::Object ^   sender, System::EventArgs ^   e)  {
    2                 //MessageBox.Show(this,"wocao");//C#格式的调用方法是不行的
    3                 MessageBox::Show(this,"我是傻逼");//这才是正确的
    4         }

    5     };
    6 }

  25. 第一个参数是父窗体,第二个参数是消息框的内容。细心的同学发现了,这里和C#不太一样,是的,如果你按C#的写法:Messsage.Show(...),这样程序是没法通过编译的,毕竟是两种语言嘛。
  26. 好了,我们回到主程序入口那里,修改Exercise()为HelloWorld(),运行看看,出错了!!没错,你还得添加头文件,添加引用,真是麻烦啊,没办法,这儿还没有在C#下的引用添加提示,不知道Clipse下的Cdt有没有这个功能,最终代码如下
     1 #include  < windows.h >
     2 #include  " Hello World.h "
     4 using   namespace  WInformCpp;
     5 int  APIENTRY WinMain(HINSTANCE hInstance,
     6                      HINSTANCE hPrevInstance,
     7                      LPSTR lpCmdLine,
     8                       int  nCmdShow)
     9 {
    10    Application::Run(gcnew HelloWorld());
    11
    12    return 0;
    13}

    好了,运行一下看看。像这样,那就对了,再深入地使用就不是本贴讨论的范畴了,在C++上,各位都是我的前辈
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++用WinForm做界面的实现 的相关文章

  • 操作XML 报错:根级别上的数据无效 和 给定编码中的字符无效 解决办法

    根级别上的数据无效 解决如下 private void button1 Click object sender EventArgs e try XmlDocument doc 61 new XmlDocument string file 6
  • DataGridRow的创建

    用原始datagridview的列名赋值的时候找不到列名 xff0c 用索引就可以 xff0c 不知道是怎么回事 DataGridViewRow dr 61 new DataGridViewRow dr CreateCells this d
  • 常用方法和属性列表

    BitConvert islittle 判断大小端 Array reverse 反排列数组
  • System.Windows.Forms.Timer与System.Timers.Timer的区别

    NET Framework里面提供了三种Timer xff1a System Windows Forms Timer System Timers Timer System Threading Timer VS NET 2005默认只有一个T
  • c++中scanf和printf

    xfeff xfeff scanf函数一般格式是 xff1a scanf 格式控制 输出表列 printf函数的一般格式是 printf 格式控制 输出表列 例3 4 用scanf和printf函数进行输入和输出 include lt io
  • win10无法上网,连网显示黄色三角形探号

    1 打开网络属性 2 打开无线电源开关 3 重启电脑 4 使用网络疑难解答 5 重启DHCP
  • 计算机程序的思维逻辑 (12) - 函数调用的基本原理

    xfeff xfeff 栈 上节我们介绍了函数的基本概念 xff0c 在最后我们提到了一个系统异常java lang StackOverflowError xff0c 栈溢出错误 xff0c 要理解这个错误 xff0c 我们需要理解函数调用
  • c语言中函数调用的原理

    xfeff xfeff 一 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数 xff08 过程 xff09 和被调用函数 xff08 过程 xff09 在调用发生时进行通信的方法问题 基本的参数传递机制有两种 xff1a
  • 栈中函数调用原理_详解

    xfeff xfeff 函数调用是程序设计中的重要环节 xff0c 本文就函数调用的过程进行分析 一 eip ebp esp介绍 EIP xff0c EBP xff0c ESP都是系统的寄存器 xff0c 里面存储的是些地址 xff0c 我
  • C++中如何定义动态数组

    xfeff xfeff 首先 xff1a 为什么需要动态定义数组呢 xff1f 这是因为 xff0c 很多情况下 xff0c 在预编译过程阶段 xff0c 数组的长度是不能预先知道的 xff0c 必须在程序运行时动态的给出 但是问题是 xf
  • 数组和指针、数组指针和指针数组

    xfeff xfeff 数组和指针 数组指针和指针数组 函数指针和指针函数 数组标识符的意义 静态和动态创建的数组的本质区别 标识符类型判断方法 html view plain copy print include lt iostream
  • 函数中的指针分配的内存怎么释放

    xfeff xfeff 被调用函数里动态分配的内存要不要手动释放 20 我想手动释放来着 xff0c 但是指针是在被调用函数里声明的 xff0c 在调用函数里释放不了 我的被调用函数返回的就是这个指针 xff0c 我也不能在被调用函数里释放
  • duilib各种布局的作用,相对布局与绝对布局的的意义与用法

    duilib各种布局的作用 xff0c 相对布局与绝对布局的的意义与用法 原文 http blog csdn net zhuhongshu article details 38531447 主题 Duilib 转载请说明原出处 xff0c
  • wpf中:xaml中的命名空间的引入方法

    xfeff xfeff wpf中 xff1a xaml中的命名空间的引入 本文章已收录于 xff1a 在xaml中如有要使用c 数据类型 xff0c 那么需要引入c 的命名空间 xff0c 如需要使用String类 xff0c 则需要引入S
  • WPF Application启动界面设置——

    xfeff xfeff 本文章已收录于 xff1a 设置WPF从不同界面启动可以通过设置 StartupUri 属性完成 http blog csdn net bamboo slit article details 7164848 设置St
  • 【2.路由器接口配置】

    1 ip route 0 0 0 0 43 0 0 0 0 43 接口的IP地址 2 ip address ip地址 43 子网掩码 pos framing sdh sonet pos flag s1s0 2 0 3 4 5
  • Linux(debian7)操作基础(七)之LightDM详解及使用

    LightDM自启动默认登录 使用命令sudo vim etc lightdm lightdm conf 将 autologin user 61 更改为 autologin user 61 登录用户名 xff0c 保存退出 更改主机名 xf
  • c#读取指定路径的配置文件

    xfeff xfeff ExeConfigurationFileMap map 61 new ExeConfigurationFileMap map ExeConfigFilename 61 64 34 F App1 config 34 C
  • C#创建com组件

    xfeff xfeff 本文详细阐述如何用C 创建COM组件 xff0c 并能用VC6 0等调用 并附有完整测试通过的代码 废话不多说 xff0c 下面开始介绍 xff1a 开发工具 xff1a VS2010 VS2010命令提示符在 xf
  • Windows下静态链接库的使用

    xfeff xfeff 静态链接是指将一个或多个静态链接库 xff08 lib文件 xff09 在Link时期和调用该库的程序一起形成exe文件 网上关于静态链接库的理论叙述多且详尽 xff0c 我就不再造轮子了 xff0c 此处仅说明一下

随机推荐

  • 异步消息的传递-回调机制

    xfeff xfeff 软件模块之间总是存在着一定的接口 xff0c 从调用方式上 xff0c 可以把他们分为三类 xff1a 同步调用 回调和异步调用 同步调用是一种阻塞式调用 xff0c 调用方要等待对方执行完毕才返回 xff0c 它是
  • C++回调机制的几种实现方式

    xfeff xfeff Callback Callback的本质是设置一个函数指针进去 xff0c 然后在需要触发某个事件时调用该方法 比如Windows的窗口消息处理函数就是这种类型 比如下面的示例代码 xff0c 我们在Download
  • C/C++函数调用的几种方式总结

    xfeff xfeff 本篇文章主要是对C C 43 43 函数调用的几种方式进行了详细的总结介绍 xff0c 需要的朋友可以过来参考下 xff0c 希望对大家有所帮助 调用函数时 xff0c 计算机常用栈来存储传递给函数的参数 栈是一种先
  • Aspose.Cells.dll操作exel

    xfeff xfeff 1 创建execl xff08 不需要服务器或者客户端安装office xff09 public void DCExexl DataTable dt Workbook wb 61 new Workbook Works
  • 使用Aspose.Cells组件生成Excel文件实例

    xfeff xfeff 这篇文章主要介绍了使用Aspose Cells组件生成Excel文件的方法 xff0c 大家参考使用吧 生成带表头的Excel文件 xff0c 格式如下显示 当然更复杂的一些也可以通过 合并单元格的方法 public
  • VS2010中添加lib库引用

    xfeff xfeff 一 VS2010中添加lib库引用 1 菜单 项目 gt 属性 gt 配置属性 gt 链接器 gt 输入 附加依赖项 加入库名 如 my API lib 或是在cpp源文件中用代码 pragma comment li
  • C++静态库与动态库

    xfeff xfeff 这次分享的 宗旨 是 让大家学会创建与使用静态库 动态库 xff0c 知道静态库与动态库的区别 xff0c 知道使用的时候如何选择 这里不深入介绍静态库 动态库的底层格式 xff0c 内存布局等 xff0c 有兴趣的
  • 在mysql设置root用户密码的方法

    在mysql设置root用户密码的方法
  • C++中的“error:LNK2005 已经在*.obj中定义”异常

    xfeff xfeff C 43 43 中的 error LNK2005 已经在 obj中定义 异常问题 异常现象如下 xff1a C 43 43 中的 error LNK2005 已经在 obj中定义 异常问题 图1 error LNK2
  • 指令和数据都用二进制代码存放在内存中,从时空观角度回答CPU如何区分读出的代码是指令还是数据

    xfeff xfeff 指令用来确定 做什么 和 怎样做 xff0c 数据是 做 的时候需要原始数 计算机可以从时间和空间两方面来区分指令和数据 xff0c 在时间上 xff0c 取指周期从内存中取出的是指令 xff0c 而执行周期从内存取
  • C++类的内存地址存放问题

    了解C 43 43 类地址的存放和分配等问题 xff0c 能帮助我们更深入 更清晰了解类的组成及其使用 自己目前不是很清楚 xff0c 先收集一些网上资料 xff0c 而后再慢慢补充增加的了解 网络收集之 关于结构体和C 43 43 类的内
  • 介绍了如何取成员函数的地址以及调用该地址

    xfeff xfeff 摘要 xff1a 介绍了如何取成员函数的地址以及调用该地址 关键字 xff1a C 43 43 成员函数 this指针 调用约定 一 成员函数指针的用法 在C 43 43 中 xff0c 成员函数的指针是个比较特殊的
  • 类中内容在内存中到底是如何分配的呢?

    xfeff xfeff 分类 xff1a 一个类 xff0c 有成员变量 xff1a 静态与非静态之分 xff1b 而成员函数有三种 xff1a 静态的 非静态的 虚的 那么这些个东西在内存中到底是如何分配的呢 xff1f 以一个例子来说明
  • 什么变量在堆内存里存放,什么变量在栈内存里存放

    堆和栈的区别 stack and heap 一般认为在c中分为这几个存储区 1栈 有编译器自动分配释放 2堆 一般由程序员分配释放 xff0c 若程序员不释放 xff0c 程序结束时可能由OS回收 3全局区 xff08 静态区 xff09
  • C# 泛型(Generic)

    xfeff xfeff 泛型 xff08 Generic xff09 允许您延迟编写类或方法中的编程元素的数据类型的规范 xff0c 直到实际在程序中使用它的时候 换句话说 xff0c 泛型允许您编写一个可以与任何数据类型一起工作的类或方法
  • 基础拾遗------泛型详解

    xfeff xfeff 基础拾遗 xff1a 前言 xff1a 1 泛型的约束2 泛型继承3 关键字default4 泛型方法5 泛型接口6 泛型数组7 泛型委托 基础拾遗 xff1a 基础拾遗 特性详解 基础拾遗 webservice详解
  • ORA-31600: invalid input value INDEX PARTITION for parameter

    运行备份数据库对象的存储过程报如下错误 SQL gt exec proc auto backup begin proc auto backup end ORA 31600 invalid input value INDEX PARTITIO
  • Windows静态库和动态库的调用方法汇总

    静态库的调用方法 第一种 xff1a 项目设置中引用 xff0c 在项目的属性中设置 第二种 xff1a 在代码中使用 pragma comment lib 34 lib文件名 34 第一种方法 步骤一 xff1a 右键单击项目 gt 属性
  • 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解

    VS项目中的包含目录 库目录 附加包含目录 附加库目录 附加依赖项均在 34 项目 gt 属性 gt 配置属性 34 下进行配置 xff0c 具体说明如下 xff1a VC 43 43 目录 xff1a 包含目录 xff1a 寻找 incl
  • c++用WinForm做界面的实现

    以前是做C 的 xff0c 对Winform情有独钟 xff0c 最近想转C 43 43 想把以前的一些Delphi转成c 43 43 xff0c MFC我不熟而且用起来相当烦效果又丑 xff0c GTK图形库用起来太麻烦 xff0c 琢磨