
置頂隨筆
onedouble.cnblogs.com
posted @
2012-05-20 21:41 叫我老王吧 閱讀(413) |
評論 (0) |
編輯 收藏
因為筆者是以前是做C#的,對Winform情有獨鐘,最近想轉C++,想把以前的一些Delphi轉成c++,MFC我不熟而且用起來相當煩效果又丑,GTK圖形庫用起來太麻煩,琢磨著研究一下WInform前臺,C++做后臺的方法,谷歌了一下,沒看到什么中國資料,我草,我以前看過的啊,找來找去,找到一篇英文的,寫得太糾結,我結合自己使用的經驗,重新整理一下,言簡意賅,簡明易懂。謹供新人參考,老鳥勿拍。
- 首先打開你的VS2005
- 依次點擊菜單欄的文件-->新建-->項目
- 在左邊的語言列表選里,選擇C++分支下的CLR,然后在右邊單擊“CLR 空項目”
- 在名稱框里輸入Exercise2:
- 點擊“OK”,創建項目成功。
- 好了,這只是創建了好了一個托管C++項目,要使用WINFORM,我們要引入相關的.NET組件。
- 在vs主界面上依次點擊菜單欄的項目-->"引用";
- 在彈出的子窗口中選擇添加新引用;
- 在.NET標簽頁下選擇System,點確定,再點擊添加新應用,在.NET標簽頁下選擇System.Window.Forms,然后確定,如圖
- 都完成后,應該像這樣,然后點擊確定
- 創建一個新的類,點擊VS主界面菜單欄的項目-->添加類;
- 在彈出的子窗體右邊選擇C++類,點確定,會出現添加類向導,在類名中輸入CExercise,基類中填Form
- 然后我們來到自動生成的頭文件代碼中,添加System和Form的引用,修改后的文件應該如下
-
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
};
然后我們要創建一個主程序來調用這個類。這個大家應該都比我熟的,右擊源文件文件夾,點擊添加-->新建項,選擇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換成你自己別的名字的類就可以運行那個類了,當然了,要注意包含頭文件。點擊運行看看,一個白白的窗體,對嗎,好的,革命成功邁出了堅實的一步。
- 下面我們來試著添加一個button按鈕,修改Exercise.cpp的代碼如下
-
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
在運行看看,應該像這樣
- 然后如果你還想繼續給這個按鈕添加文字設置尺寸什么的,你可以通過像這樣的代碼,具體我不說多少,因為選擇Winform就是看中快速的控件拖拉功能,都是手寫我還不如用GTK
-
this->button1->Name = L"button1";//設置按鈕文字
this->button1->Size = System::Drawing::Size(75, 23);//設置按鈕尺寸
- 好了,下面重點來了,如何像C#一樣自由地拖拉控件改屬性呢,我們右擊項目,選擇添加-->新建項。
- 在彈出的子窗體右邊選擇Windows窗體,輸入一個名字,比如“HelloWorld”,點擊確定
- 然后我們就欣喜的發現,哇,又回到Winform拖拉控件的時代啦,是的,沒錯,而且我們可以以C++寫后臺。沒用過c#的朋友請在界面上找找工具箱,實在沒找到請依次點擊主窗體上菜單欄的視圖-->工具箱,然后從工具箱里找到一個button控件拖動到主窗體上。
- 之后雙擊這個button,會自動添加一個button的單擊事件,我們希望單擊的時候彈出一個“我是傻逼”的消息框,代碼如下:
-
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
}
第一個參數是父窗體,第二個參數是消息框的內容。細心的同學發現了,這里和C#不太一樣,是的,如果你按C#的寫法:Messsage.Show(...),這樣程序是沒法通過編譯的,畢竟是兩種語言嘛。
- 好了,我們回到主程序入口那里,修改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++上,各位都是我的前輩
posted @
2010-12-16 22:23 叫我老王吧 閱讀(38833) |
評論 (27) |
編輯 收藏
摘要:
Lesson 1: Getting Started with Direct3D
Les...
閱讀全文
posted @
2010-11-11 11:57 叫我老王吧 閱讀(3002) |
評論 (14) |
編輯 收藏
1
GtkTreeIter iter;//定義一個迭代器
2
GtkTreeModel *pmodel;
3
char* pitem;
4
pmodel=gtk_tree_view_get_model(GTK_TREE_VIEW1));//得到TREEVIEW的model
5
gtk_tree_model_get_iter_first(pmodel,&iter);//迭代器定位到第一行
6
int columns=gtk_tree_model_get_n_columns(pmodel);//獲取行數
7
8
//獲取列名
9
for(int i=0;i<columns;i++)
10
{
11
GtkTreeViewColumn *column = gtk_tree_view_get_column(GTK_TREE_VIEW(control),i);//遍歷header
12
string coltitle(__(gtk_tree_view_column_get_title(column),1));
13
cout<<coltitle;//輸出列名
14
}
15
16
do//開始遍歷內容
17
{
18
for(int i=0;i<columns;i++)
19
{
20
gtk_tree_model_get (GTK_TREE_MODEL(pmodel),&iter,
21
i, &pitem,
22
-1);//將指定單元格的值傳給pitem
23
try
24
{
25
cout<<pitem;//輸出單元格的值
26
}catch
{}
27
}
28
}while(gtk_tree_model_iter_next(pmodel,&iter));
唉,網上找了半天,沒找到思路,只有自己慢慢啃了,寫完發一下,給需要的朋友一些借鑒
posted @
2010-06-25 11:57 叫我老王吧 閱讀(3955) |
評論 (0) |
編輯 收藏