c++用WinForm做界面的实现

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

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

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

    9c++用WinForm做界面的实现

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

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

    5c++用WinForm做界面的实现    };
    6c++用WinForm做界面的实现}

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

    好了,运行一下看看。像这样,那就对了,再深入地使用就不是本贴讨论的范畴了,在C++上,各位都是我的前辈
  34. c++用WinForm做界面的实现