- 首先打開你的VS2005
- 依次點(diǎn)擊菜單欄的文件-->新建-->項(xiàng)目
- 在左邊的語言列表選里,選擇C++分支下的CLR,然后在右邊單擊“CLR 空項(xiàng)目”
- 在名稱框里輸入Exercise2:
- 點(diǎn)擊“OK”,創(chuàng)建項(xiàng)目成功。
- 好了,這只是創(chuàng)建了好了一個托管C++項(xiàng)目,要使用WINFORM,我們要引入相關(guān)的.NET組件。
- 在vs主界面上依次點(diǎn)擊菜單欄的項(xiàng)目-->"引用";
- 在彈出的子窗口中選擇添加新引用;
- 在.NET標(biāo)簽頁下選擇System,點(diǎn)確定,再點(diǎn)擊添加新應(yīng)用,在.NET標(biāo)簽頁下選擇System.Window.Forms,然后確定,如圖
- 都完成后,應(yīng)該像這樣,然后點(diǎn)擊確定
- 創(chuàng)建一個新的類,點(diǎn)擊VS主界面菜單欄的項(xiàng)目-->添加類;
- 在彈出的子窗體右邊選擇C++類,點(diǎn)確定,會出現(xiàn)添加類向?qū)В陬惷休斎隒Exercise,基類中填Form
- 然后我們來到自動生成的頭文件代碼中,添加System和Form的引用,修改后的文件應(yīng)該如下
-
1

2
#pragma once
3
4
using namespace System;
5
using namespace System::Windows::Forms;
6
7
public ref class CExercise : public Form
8

{
9
public:
10
CExercise(void);
11
};
然后我們要創(chuàng)建一個主程序來調(diào)用這個類。這個大家應(yīng)該都比我熟的,右擊源文件文件夾,點(diǎn)擊添加-->新建項(xiàng),選擇CPP文件,代碼如下: -
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換成你自己別的名字的類就可以運(yùn)行那個類了,當(dāng)然了,要注意包含頭文件。點(diǎn)擊運(yùn)行看看,一個白白的窗體,對嗎,好的,革命成功邁出了堅實(shí)的一步。
- 下面我們來試著添加一個button按鈕,修改Exercise.cpp的代碼如下
-
1

2
#include "Exercise.h"
3
4
CExercise::CExercise(void)
5

{
6
System::Windows::Forms::Button^ button1=gcnew Button;//創(chuàng)建按鈕
7
this->Controls->Add(button1);//把按鈕附加到我們的窗體上
8
}
9
在運(yùn)行看看,應(yīng)該像這樣
- 然后如果你還想繼續(xù)給這個按鈕添加文字設(shè)置尺寸什么的,你可以通過像這樣的代碼,具體我不說多少,因?yàn)檫x擇Winform就是看中快速的控件拖拉功能,都是手寫我還不如用GTK
-
this->button1->Name = L"button1";//設(shè)置按鈕文字
this->button1->Size = System::Drawing::Size(75, 23);//設(shè)置按鈕尺寸
- 好了,下面重點(diǎn)來了,如何像C#一樣自由地拖拉控件改屬性呢,我們右擊項(xiàng)目,選擇添加-->新建項(xiàng)。
- 在彈出的子窗體右邊選擇Windows窗體,輸入一個名字,比如“HelloWorld”,點(diǎn)擊確定
- 然后我們就欣喜的發(fā)現(xiàn),哇,又回到Winform拖拉控件的時代啦,是的,沒錯,而且我們可以以C++寫后臺。沒用過c#的朋友請在界面上找找工具箱,實(shí)在沒找到請依次點(diǎn)擊主窗體上菜單欄的視圖-->工具箱,然后從工具箱里找到一個button控件拖動到主窗體上。
- 之后雙擊這個button,會自動添加一個button的單擊事件,我們希望單擊的時候彈出一個“我是傻逼”的消息框,代碼如下:
-
1

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
2
//MessageBox.Show(this,"wocao");//C#格式的調(diào)用方法是不行的
3
MessageBox::Show(this,"我是傻逼");//這才是正確的
4
}
5
};
6
}
第一個參數(shù)是父窗體,第二個參數(shù)是消息框的內(nèi)容。細(xì)心的同學(xué)發(fā)現(xiàn)了,這里和C#不太一樣,是的,如果你按C#的寫法:Messsage.Show(...),這樣程序是沒法通過編譯的,畢竟是兩種語言嘛。- 好了,我們回到主程序入口那里,修改Exercise()為HelloWorld(),運(yùn)行看看,出錯了!!沒錯,你還得添加頭文件,添加引用,真是麻煩啊,沒辦法,這兒還沒有在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
}
好了,運(yùn)行一下看看。像這樣,那就對了,再深入地使用就不是本貼討論的范疇了,在C++上,各位都是我的前輩
因?yàn)楣P者是以前是做C#的,對Winform情有獨(dú)鐘,最近想轉(zhuǎn)C++,想把以前的一些Delphi轉(zhuǎn)成c++,MFC我不熟而且用起來相當(dāng)煩效果又丑,GTK圖形庫用起來太麻煩,琢磨著研究一下WInform前臺,C++做后臺的方法,谷歌了一下,沒看到什么中國資料,我草,我以前看過的啊,找來找去,找到一篇英文的,寫得太糾結(jié),我結(jié)合自己使用的經(jīng)驗(yàn),重新整理一下,言簡意賅,簡明易懂。謹(jǐn)供新人參考,老鳥勿拍。
FeedBack:
# re: c++用WinForm做界面的實(shí)現(xiàn)
2010-12-17 10:26 | waiting4you
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
2010-12-18 11:17 | crossgate
@叫我老王吧
項(xiàng)目可以不是clr項(xiàng)目,比如win32 空項(xiàng)目就可以。也就是非托管的VC項(xiàng)目。
然后在項(xiàng)目屬性的general里,"Common Language Runtime Support"里選中“Common Language Runtime Support(/clr)”。這樣就可以繼續(xù)貼子里的操作,引用.net庫了。后續(xù)一樣。如果想用到.net庫的winform,還是得聲明托管指針,也就是必須用^而不是*來表示指針。相當(dāng)于混合編程,主體是C++,搭配C++.net代碼來做界面。 回復(fù) 更多評論
項(xiàng)目可以不是clr項(xiàng)目,比如win32 空項(xiàng)目就可以。也就是非托管的VC項(xiàng)目。
然后在項(xiàng)目屬性的general里,"Common Language Runtime Support"里選中“Common Language Runtime Support(/clr)”。這樣就可以繼續(xù)貼子里的操作,引用.net庫了。后續(xù)一樣。如果想用到.net庫的winform,還是得聲明托管指針,也就是必須用^而不是*來表示指針。相當(dāng)于混合編程,主體是C++,搭配C++.net代碼來做界面。 回復(fù) 更多評論
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
2010-12-19 23:37 | 叫我老王吧
@唐焱@未注冊
首先感謝你們能花時間看完我這篇爛帖
按鈕樣式你可以直接在屬性里設(shè)定背景圖片,換到MFC這又得做刷子了吧。.NET的強(qiáng)大并非是他默認(rèn)的樣式有多好看,否則DirectUI也不會賣那么貴,而是他的方便快捷,多種多樣個性化的控件而不是MFC數(shù)來數(shù)去還不到VCL的一半,說句不正經(jīng)的話,至少他不用給窗體換個背景色還要花好幾行代碼做刷子。
最好,即使你們再怎么討厭.NET,喜歡MFC,總有一些VCL或者GTK過來的人不更習(xí)慣控件拖拉而不是把菜單和用戶區(qū)分開做不是嗎?每個人都有自己選擇的自由 回復(fù) 更多評論
首先感謝你們能花時間看完我這篇爛帖
按鈕樣式你可以直接在屬性里設(shè)定背景圖片,換到MFC這又得做刷子了吧。.NET的強(qiáng)大并非是他默認(rèn)的樣式有多好看,否則DirectUI也不會賣那么貴,而是他的方便快捷,多種多樣個性化的控件而不是MFC數(shù)來數(shù)去還不到VCL的一半,說句不正經(jīng)的話,至少他不用給窗體換個背景色還要花好幾行代碼做刷子。
最好,即使你們再怎么討厭.NET,喜歡MFC,總有一些VCL或者GTK過來的人不更習(xí)慣控件拖拉而不是把菜單和用戶區(qū)分開做不是嗎?每個人都有自己選擇的自由 回復(fù) 更多評論
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)
# re: c++用WinForm做界面的實(shí)現(xiàn)[未登錄]
# re: c++用WinForm做界面的實(shí)現(xiàn)
2014-07-14 11:38 | AlvenBlack
# re: c++用WinForm做界面的實(shí)現(xiàn)[未登錄]
# re: c++用WinForm做界面的實(shí)現(xiàn)
2015-05-24 10:14 | wenluderen
多謝博主的講解 , 我在VS2012 測試了
結(jié)果不是很好 報錯。
1> Exercise.cpp
1>e:\exercise2\exercise2\Exercise.h(9): error C3624: “System::ComponentModel::Component”: 使用此類型需要引用 程序集“System”
1> 在導(dǎo)入類型“System::Windows::Forms::Control ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1>Exercise.cpp(5): fatal error C1903: 無法從以前的錯誤中恢復(fù);正在停止編譯
1> MainGsz.cpp
1>e:\exercise2\exercise2\Exercise.h(9): error C3624: “System::ComponentModel::Component”: 使用此類型需要引用 程序集“System”
1> 在導(dǎo)入類型“System::Windows::Forms::Control ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 正在生成代碼...
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========
回復(fù) 更多評論
結(jié)果不是很好 報錯。
1> Exercise.cpp
1>e:\exercise2\exercise2\Exercise.h(9): error C3624: “System::ComponentModel::Component”: 使用此類型需要引用 程序集“System”
1> 在導(dǎo)入類型“System::Windows::Forms::Control ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1>Exercise.cpp(5): fatal error C1903: 無法從以前的錯誤中恢復(fù);正在停止編譯
1> MainGsz.cpp
1>e:\exercise2\exercise2\Exercise.h(9): error C3624: “System::ComponentModel::Component”: 使用此類型需要引用 程序集“System”
1> 在導(dǎo)入類型“System::Windows::Forms::Control ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時發(fā)生此診斷。
1> 正在生成代碼...
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========
回復(fù) 更多評論
| 只有注冊用戶登錄后才能發(fā)表評論。 | ||
|
||
|
相關(guān)文章:
|
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
|
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
|---|---|---|---|---|---|---|---|---|---|
| 28 | 29 | 30 | 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
| 26 | 27 | 28 | 29 | 30 | 31 | 1 | |||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
常用鏈接
留言簿(4)
隨筆分類
隨筆檔案
- 2012年9月 (1)
- 2012年8月 (1)
- 2012年5月 (1)
- 2011年2月 (1)
- 2010年12月 (4)
- 2010年11月 (1)
- 2010年10月 (2)
- 2010年9月 (3)
- 2010年6月 (1)
- 2010年4月 (1)
搜索
最新評論

- 1.?re: c++用WinForm做界面的實(shí)現(xiàn)
-
@wenluderen
項(xiàng)目屬性, 添加新引用"System", 和文章第11步一樣 - --Taoism
- 2.?re: c++用WinForm做界面的實(shí)現(xiàn)
- 評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
- --wenluderen
- 3.?re: c++用WinForm做界面的實(shí)現(xiàn)
- 我按你的步驟 怎么操作不成功呢
- --劉
- 4.?re: c++用WinForm做界面的實(shí)現(xiàn)
-
非常感謝@fei
- --hooknn
- 5.?re: c++用WinForm做界面的實(shí)現(xiàn)[未登錄]
- 樓主寫的很實(shí)用,也很詳細(xì),只是有一點(diǎn)點(diǎn)沒有說,在地33點(diǎn)中的WInformCpp是HelloWord中的命名空間,一般默認(rèn)生成,我剛開始就沒找到,對菜鳥來說還真的不好找啊
- --菜鳥

