利用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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97