• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 16,  comments - 81,  trackbacks - 0
                    因?yàn)楣P者是以前是做C#的,對(duì)Winform情有獨(dú)鐘,最近想轉(zhuǎn)C++,想把以前的一些Delphi轉(zhuǎn)成c++,MFC我不熟而且用起來(lái)相當(dāng)煩效果又丑,GTK圖形庫(kù)用起來(lái)太麻煩,琢磨著研究一下WInform前臺(tái),C++做后臺(tái)的方法,谷歌了一下,沒(méi)看到什么中國(guó)資料,我草,我以前看過(guò)的啊,找來(lái)找去,找到一篇英文的,寫得太糾結(jié),我結(jié)合自己使用的經(jīng)驗(yàn),重新整理一下,言簡(jiǎn)意賅,簡(jiǎn)明易懂。謹(jǐn)供新人參考,老鳥(niǎo)勿拍。
                  
            1. 首先打開(kāi)你的VS2005
            2. 依次點(diǎn)擊菜單欄的文件-->新建-->項(xiàng)目
            3. 在左邊的語(yǔ)言列表選里,選擇C++分支下的CLR,然后在右邊單擊“CLR 空項(xiàng)目”
            4. 在名稱框里輸入Exercise2:
            5. 點(diǎn)擊“OK”,創(chuàng)建項(xiàng)目成功。
            6. 好了,這只是創(chuàng)建了好了一個(gè)托管C++項(xiàng)目,要使用WINFORM,我們要引入相關(guān)的.NET組件。
            7. 在vs主界面上依次點(diǎn)擊菜單欄的項(xiàng)目-->"引用";
            8. 在彈出的子窗口中選擇添加新引用;
            9. 在.NET標(biāo)簽頁(yè)下選擇System,點(diǎn)確定,再點(diǎn)擊添加新應(yīng)用,在.NET標(biāo)簽頁(yè)下選擇System.Window.Forms,然后確定,如圖
            10. 都完成后,應(yīng)該像這樣,然后點(diǎn)擊確定
            11. 創(chuàng)建一個(gè)新的類,點(diǎn)擊VS主界面菜單欄的項(xiàng)目-->添加類;
            12. 在彈出的子窗體右邊選擇C++類,點(diǎn)確定,會(huì)出現(xiàn)添加類向?qū)В陬惷休斎隒Exercise,基類中填Form
            13. 然后我們來(lái)到自動(dòng)生成的頭文件代碼中,添加System和Form的引用,修改后的文件應(yīng)該如下
            14.  1
               2#pragma once
               3
               4using namespace System;
               5using namespace System::Windows::Forms;
               6
               7public ref class CExercise : public Form
               8{
               9public:
              10    CExercise(void);
              11}
              ;

              然后我們要?jiǎng)?chuàng)建一個(gè)主程序來(lái)調(diào)用這個(gè)類。這個(gè)大家應(yīng)該都比我熟的,右擊源文件文件夾,點(diǎn)擊添加-->新建項(xiàng),選擇CPP文件,代碼如下:
            15.  1
               2
               3#include <windows.h>
               4#include "Exercise.h"
               5
               6int APIENTRY WinMain(HINSTANCE hInstance,
               7             HINSTANCE hPrevInstance,
               8             LPSTR lpCmdLine,
               9             int nCmdShow)
              10{
              11    Application::Run(gcnew CExercise());
              12
              13    return 0;
              14}

              含義我不多說(shuō)了,把那個(gè)Cexercise換成你自己別的名字的類就可以運(yùn)行那個(gè)類了,當(dāng)然了,要注意包含頭文件。點(diǎn)擊運(yùn)行看看,一個(gè)白白的窗體,對(duì)嗎,好的,革命成功邁出了堅(jiān)實(shí)的一步。
            16. 下面我們來(lái)試著添加一個(gè)button按鈕,修改Exercise.cpp的代碼如下
            17. 1
              2#include "Exercise.h"
              3
              4CExercise::CExercise(void)
              5{
              6    System::Windows::Forms::Button^  button1=gcnew Button;//創(chuàng)建按鈕
              7    this->Controls->Add(button1);//把按鈕附加到我們的窗體上
              8}

              9

              在運(yùn)行看看,應(yīng)該像這樣
            18. 然后如果你還想繼續(xù)給這個(gè)按鈕添加文字設(shè)置尺寸什么的,你可以通過(guò)像這樣的代碼,具體我不說(shuō)多少,因?yàn)檫x擇Winform就是看中快速的控件拖拉功能,都是手寫我還不如用GTK
            19. this->button1->Name = L"button1";//設(shè)置按鈕文字
              this->button1->Size = System::Drawing::Size(7523);//設(shè)置按鈕尺寸

            20. 好了,下面重點(diǎn)來(lái)了,如何像C#一樣自由地拖拉控件改屬性呢,我們右擊項(xiàng)目,選擇添加-->新建項(xiàng)。
            21. 在彈出的子窗體右邊選擇Windows窗體,輸入一個(gè)名字,比如“HelloWorld”,點(diǎn)擊確定
            22. 然后我們就欣喜的發(fā)現(xiàn),哇,又回到Winform拖拉控件的時(shí)代啦,是的,沒(méi)錯(cuò),而且我們可以以C++寫后臺(tái)。沒(méi)用過(guò)c#的朋友請(qǐng)?jiān)诮缑嫔险艺夜ぞ呦洌瑢?shí)在沒(méi)找到請(qǐng)依次點(diǎn)擊主窗體上菜單欄的視圖-->工具箱,然后從工具箱里找到一個(gè)button控件拖動(dòng)到主窗體上。
            23. 之后雙擊這個(gè)button,會(huì)自動(dòng)添加一個(gè)button的單擊事件,我們希望單擊的時(shí)候彈出一個(gè)“我是傻逼”的消息框,代碼如下:
            24. 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}

            25. 第一個(gè)參數(shù)是父窗體,第二個(gè)參數(shù)是消息框的內(nèi)容。細(xì)心的同學(xué)發(fā)現(xiàn)了,這里和C#不太一樣,是的,如果你按C#的寫法:Messsage.Show(...),這樣程序是沒(méi)法通過(guò)編譯的,畢竟是兩種語(yǔ)言嘛。
            26. 好了,我們回到主程序入口那里,修改Exercise()為HelloWorld(),運(yùn)行看看,出錯(cuò)了!!沒(méi)錯(cuò),你還得添加頭文件,添加引用,真是麻煩啊,沒(méi)辦法,這兒還沒(méi)有在C#下的引用添加提示,不知道Clipse下的Cdt有沒(méi)有這個(gè)功能,最終代碼如下
               1#include <windows.h>
               2#include "Hello World.h"
               4using namespace WInformCpp;
               5int 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)行一下看看。像這樣,那就對(duì)了,再深入地使用就不是本貼討論的范疇了,在C++上,各位都是我的前輩
            posted on 2010-12-16 22:23 叫我老王吧 閱讀(38808) 評(píng)論(27)  編輯 收藏 引用 所屬分類: C++

            FeedBack:
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 10:26 | waiting4you
            google一下"C++/CLI,WinForm",就能找到不少關(guān)于“C++與WinForm”的文章了。
            樓主的這篇文件卻是我見(jiàn)過(guò)的最簡(jiǎn)潔,最容易上手的一篇,支持!尤其是彈出信息很給力!!!  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 15:17 | crossgate
            剛在vs 2010里,用非托管C++項(xiàng)目,也成功實(shí)現(xiàn)了上述功能。
              回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 15:58 | Skill
            雖然那個(gè)對(duì)話框上彈出的字不登大雅之堂,但文章還是蠻基礎(chǔ)的,謝謝了  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 16:49 | 叫我老王吧
            謝謝您的支持@waiting4you
              回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 16:49 | 叫我老王吧
            @crossgate
            求細(xì)節(jié)
              回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 16:50 | 叫我老王吧
            @Skill
            您的支持是我最大的動(dòng)力,彈出信息神馬的是個(gè)人風(fēng)格,沒(méi)法改  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 19:20 | right
            C++/cli這東西沒(méi)多少人用的,新語(yǔ)法和新關(guān)鍵字實(shí)在太令人反胃了。  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-17 19:36 | 叫我老王吧
            @right
            正因?yàn)橛玫娜松伲臋n少,所以才要寫出來(lái),哪怕只能幫到一兩個(gè)人也是好的,學(xué)冷門東西時(shí)的那個(gè)孤獨(dú)無(wú)助感我太難忘了  回復(fù)  更多評(píng)論
              
            # 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庫(kù)了。后續(xù)一樣。如果想用到.net庫(kù)的winform,還是得聲明托管指針,也就是必須用^而不是*來(lái)表示指針。相當(dāng)于混合編程,主體是C++,搭配C++.net代碼來(lái)做界面。  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-18 14:33 | 唐焱
            其實(shí)MFC也是這個(gè)效果,你沒(méi)有發(fā)現(xiàn)這個(gè)按鈕都很丑么,win7上的按鈕可不是這樣的!  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-19 23:26 | 未注冊(cè)
            我也是C#轉(zhuǎn)C++,用C++開(kāi)發(fā)桌面窗口程序就是為了丟開(kāi)那沉重的framework。
            你這個(gè)效果MFC做出來(lái)的是一樣的。  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-19 23:37 | 叫我老王吧
            @唐焱@未注冊(cè)
            首先感謝你們能花時(shí)間看完我這篇爛帖
            按鈕樣式你可以直接在屬性里設(shè)定背景圖片,換到MFC這又得做刷子了吧。.NET的強(qiáng)大并非是他默認(rèn)的樣式有多好看,否則DirectUI也不會(huì)賣那么貴,而是他的方便快捷,多種多樣個(gè)性化的控件而不是MFC數(shù)來(lái)數(shù)去還不到VCL的一半,說(shuō)句不正經(jīng)的話,至少他不用給窗體換個(gè)背景色還要花好幾行代碼做刷子。
            最好,即使你們?cè)僭趺从憛?NET,喜歡MFC,總有一些VCL或者GTK過(guò)來(lái)的人不更習(xí)慣控件拖拉而不是把菜單和用戶區(qū)分開(kāi)做不是嗎?每個(gè)人都有自己選擇的自由  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-19 23:39 | 叫我老王吧
            @crossgate
            你把項(xiàng)目屬性里德CLR托管選上了,他不就是已經(jīng)變成了CLR項(xiàng)目了。  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-20 13:54 | ABC
            為什么不考慮使用QT呢?  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2010-12-20 13:57 | 叫我老王吧
            @ABC
            有了GTK就不考慮QT了  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2011-02-23 00:14 | fei
            為什么不直接在VC++里新建windows form 的工程呢.... 我以為是講界面調(diào)用clr的程序..  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2011-02-23 00:20 | 叫我老王吧
            @fei
            哎呀,純屬是我不知道有這個(gè)功能,我無(wú)知了  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2012-11-17 15:05 | 村雨Hectic
            http://www.t-hart.org/vs2012/
            這個(gè)補(bǔ)丁可以讓vs2012增加vs2008那樣可以直接創(chuàng)建windows form工程  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2013-09-19 11:07 | fq
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2013-12-23 16:00 | lw
            項(xiàng)目屬性-》配置屬性-》連接器-》系統(tǒng)-》-》子系統(tǒng)(窗口:(subsystem:windows))。
            項(xiàng)目屬性-》配置屬性-》連接器-》系統(tǒng)-》-》高級(jí) (入口:main)  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)[未登錄](méi)
            2014-05-05 15:55 | cl
            這個(gè)挺簡(jiǎn)單明了的,就是第33點(diǎn)里面using namespace WInformCpp;
            中的WinformCpp是哪里來(lái)的呢?  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2014-07-14 11:38 | AlvenBlack
            第33點(diǎn)里面using namespace WInformCpp;
            中的WinformCpp報(bào)錯(cuò)a namespace with this name does not exist?  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)[未登錄](méi)
            2014-07-17 13:28 | 菜鳥(niǎo)
            樓主寫的很實(shí)用,也很詳細(xì),只是有一點(diǎn)點(diǎn)沒(méi)有說(shuō),在地33點(diǎn)中的WInformCpp是HelloWord中的命名空間,一般默認(rèn)生成,我剛開(kāi)始就沒(méi)找到,對(duì)菜鳥(niǎo)來(lái)說(shuō)還真的不好找啊  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2014-12-03 22:11 | hooknn
            非常感謝@fei
              回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2015-04-12 21:35 |
            我按你的步驟 怎么操作不成功呢  回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2015-05-24 10:14 | wenluderen
            多謝博主的講解 , 我在VS2012 測(cè)試了

            結(jié)果不是很好 報(bào)錯(cuò)。


            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)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1>Exercise.cpp(5): fatal error C1903: 無(wú)法從以前的錯(cuò)誤中恢復(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)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::ScrollableControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::ContainerControl ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1> 在導(dǎo)入類型“System::Windows::Forms::Form ”(從程序集“System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中導(dǎo)入)時(shí)發(fā)生此診斷。
            1> 正在生成代碼...
            ========== 全部重新生成: 成功 0 個(gè),失敗 1 個(gè),跳過(guò) 0 個(gè) ==========
              回復(fù)  更多評(píng)論
              
            # re: c++用WinForm做界面的實(shí)現(xiàn)
            2015-12-07 10:32 | Taoism
            @wenluderen
            項(xiàng)目屬性, 添加新引用"System", 和文章第11步一樣  回復(fù)  更多評(píng)論
              
            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            手机看片久久高清国产日韩| 国产精品99久久久久久www| 国内精品久久久久久麻豆| 久久精品国产99久久无毒不卡| 亚洲精品无码久久不卡| 久久99精品久久久久久不卡| 麻豆精品久久久一区二区| 国产精品无码久久久久久| 久久天堂AV综合合色蜜桃网| 亚洲中文字幕无码久久2017| 伊人久久大香线蕉av一区| 国内精品久久久久影院薰衣草| 色妞色综合久久夜夜| 精产国品久久一二三产区区别| 久久国语露脸国产精品电影| 亚洲国产精品久久电影欧美| 国产成年无码久久久久毛片| 久久久久久久综合日本亚洲| 精品久久久久久久久久中文字幕 | 精品久久久久久久久午夜福利| 久久久久久久久久久久中文字幕| 大伊人青草狠狠久久| 久久精品国产一区| 久久这里的只有是精品23| 色婷婷综合久久久久中文| 伊人久久综合热线大杳蕉下载| 久久久中文字幕日本| 欧美喷潮久久久XXXXx| 久久精品国产免费| 久久亚洲国产最新网站| 国内精品九九久久久精品| 色综合久久天天综线观看| 人妻少妇久久中文字幕| 91久久精品视频| 三级三级久久三级久久| 国产—久久香蕉国产线看观看| 久久久久亚洲国产| 亚洲国产成人久久综合一| 一本色综合网久久| 久久精品中文字幕第23页| 久久AV高清无码|