利用activex控件實現對表格的顯示與操作
發表于:2007-07-14來源:作者:點擊數:
標簽:
安紅 在許多軟件系統中,表格控件在對數據進行瀏 覽、編輯等操作方面都有良好表現。遺憾的是,Visual C++并沒有提供直接支持表格操作的通用控制類。不 過,我們可以通過注冊VisualC++5.O的ActiveX 控件中的Microsoft FlexGrid Control,version5.0 控件并添加
安紅
在許多軟件系統中,表格控件在對數據進行瀏
覽、編輯等操作方面都有良好表現。遺憾的是,Visual
C++并沒有提供直接支持表格操作的通用控制類。不
過,我們可以通過注冊VisualC++5.O的ActiveX
控件中的Microsoft FlexGrid Control,version5.0
控件并添加到項目中來實現對表格的顯示及操作。下
面將結合具體實例,介紹如何在對話框中加入表格控
件并實現對表格數據的顯示、修改和保存。文中程序
是在中文
WindowsNT4.0環境下,用VisualC++·5.0
編寫的。
1.在對話框中加入表他控件
啟動VisualC++5.0,利用AppWizard建立應
用程序框架。在AppWizard第一步(Stepl)選擇基
于對話框(Dialogbased)的應用程序類型?!ぴ?br>
AppWizard第二步(Step2)選中ActiveX Controls
復選框,表示本應用程序支持ActiveX控件。其他均
接受缺省設置,按下"OK"按鈕后AppWizard將自動
生成一個以對話框為主窗口的應用程序工程
Testtmp。
單擊Project菜單,選擇Add To Project菜單
項,再單擊Components and Controls菜單項,出現
Components and Controls Gallery對話框,雙擊
Registered ActiveX Controls列表項,在隨后的列
表框中選擇Mcrosoft FlexGrid Control,version
5.0控件;然后按下lnsert按鈕,則該表格控件類
及相關文件便插入到當前工程文件中。同時該控件將
出現在對話框編輯器的控件工具欄中,可以像其他控
件那樣拖放到正在建立的對話框中。
在ResourceView中,選中IDD_TESTTMP_DIALOG
對話框并單擊鼠標右鍵,在Properties對話框中將
Language屬性改為Chinese(P.R.C)。然后打開
IDD_TESTTMP_DIALOG對話框并適當調整其大小,拖
動控件工具欄上的表格控件到該對話框的適當位置,
可通過修改表格控件屬性確定表格的行、列數目。
2: 顯示表格數據
以顯示天線方向圖數據為例。假設天線方向圖
數據以二進制格式保存在文件AEA02000.D01中,要
顯示在表格中的數據包括序號、方位角和增益值三
項。利用ClassWizard為主窗口類CTesttmpDlg的表
格控件添加控件變量WGrid,然后在該類的對話框
初始化函數OnInitDialog()中做如下處理:
(1) 打開天線方向圖文件,將數據保存在結構
中。
(2)生成表格標題欄名稱、行高及行寬
char Title[3][30] =
( _T("序號 NO"),
_T("方位 AZ (度)°),
_T("增益 GAIN (dB)"),
for(i = O;i<3;i++)
{m_Grid.SetRow(0); //定位到第1行
m_Grid.SetCol(i); //定位到第i列
m_Grid.SetText(Title[i]); //設置標題欄名稱
m_Grid,SetColwidth(0,750); //設置第1列表格項寬度
m_Grid.SetColAlignment(0. 3); //設置第1列標題名稱以居中方
式排列
(3)根據天線方向圖文件的記錄數靈活設置表
格控件的行數及行高。
m_Grid.SetRows(sTianF.BCount+l); //設置表格控 件的行數
for(int i= O; i < sTianF.BCount+1 ;i++)
m_Grid.SetRowHeight(i,270);//設置第I行的高度
(4)將天線方向圖數據逐行顯示在表格控件中。
Char cStr[8];
for(i=1; i < STianF.BCOUnt+1;i++)
m_Grid.SetRow(i); //定位到第i行
m_Grid.SetCol(0); //定位到第1列
Sprintf(CStr,"%d",i); //將序號轉化為字符型
m_Grid.SetText(CStr); //在第i行第1列顯示序號
Sprintf(CStr,"%d%,sTianF.STianX[i-1].iAz/10); //將方
位角數據從整理轉化為字符型
m_Grid.SetCol(1); //定位到第2 列
m_Grid.SetText(cStr); //在第i行第2 列顯示方位角數據
sprintf(cStr,"%5.2f",sTianFn.sTianX[i-l].dPower);//將
增益值從浮點型轉化為字符型
m_Grid.SetCol(2);//定位到第3列
m_Grid.SetText(cStr);//在第i行第3列顯示天線增益數據
(3)修改并保存表格數據
假設只對天線方向圖中的增益數據做修改,而其他數據不能被修改
在ResourceView中,打開IDD_TESTTMP_DIALOG
對話框,選中控件工具欄上的編輯控件插入到該對話
框的適當位置。在ClassWizard中為CTesttmpDlg的
編輯控件添加控件變量m_Edit,然后在該類的對話
框初始化函數OnInitDialog()中添加如下代碼:
m_Edit.ShowWindow(SW_HIDE);//隱藏該編輯控件
(1)修改表格數據
在ClassWizard中為表格控件添加Click消息響
應函數 OnClickGrid(),為編輯控件添加
EN_KILLFOCUS消息響應函數OnKillfocusEdit()。
在消息響應函數mClickGrid()中做如下處理:
·做邊界檢查,如果鼠標擊中的表格項是標題
行、表格第1、2列,則立即返回。
.計算鼠標擊中的表格項的行寬width和行高
height,以及該表格項左上角在對話框客戶區上的屏幕坐標x和y值。
·激活編輯控件并顯示在表格的相應位置上以便接受輸入數據的修改。
CString S;
S=m_Grid.GetText();//取得該表格項顯示的數據
m_Edit.MoveWindow(X,y,Width,height);//改變編輯控作的顯示位
置及大小
m_Edit.ShowWindow(SW_SHow);//設置該編輯控件為可見狀態
m_Edit.EnableWindow(TRUE);//激活該編輯控件窗口
m_Edlt.SetFocus();//設置輸入焦點
m_Edit.SetWindowText(S);//將表格項數據顯不在該編輯控件窗口
在消息響應函數OnKillfocusEdit()中做如下處
理:
· 藏編輯控件并使控件窗口無效。
·如果最新鍵入的數據與表格項原顯示數據不
同,則用新數據代替原數據。
m_Grid.SetText(str);//重新設置表格項數據
(2)保存表格數據
在ClassWizard中,為"保存"按鈕添加
BN_CLICKED消息響應函數OnSave(),.然后在消息響應函數OnSave()中做如下處理:
·逐行獲取天線方向圖的增益數據并保存在結構中。
CString cstr;
or(int i = l; i < sTianF.BCount+l; i++)
m_Grid.SetRow(i); //定位到第i行
m_Grid.SetCol(2); //定位到第3列
cstr = m_Grid.GetText(); //獲取該行列的表格項數據
sTian.sTianx[i-1].dPower=atof(cstr);//將數據保存
到結構中
將結構數據寫到文件AEA02000.D01中保存起來
最后生成的用戶界面如圖1所示。
序號 方位 增益
1 -122 ...
2 ...
3 ... ...
4
5 ...
6
7
8
9
10
11
12
原文轉自:http://www.anti-gravitydesign.com