msflexgrid在vs2010中的基本引數對照 VC6.0
對比原文出處:http://blog.sina.com.cn/s/blog_66d64ec90100ltcv.html
不知道為何網上能查到的各種空間多是VC6.0的,關於2010的很少。是因為VC6.0經典?那大家現在多用什麼平臺進行c++軟體開發呢?時間座標:2018年。
VS2010中控制元件的使用主要將Set,Get-->put_ ,get_
1. 給FlexGrid控制元件繫結成員變數:m_FlexGrid。
2. 設定行列數
m_FlexGrid.SetCols(4); //設定列數
m_FlexGrid.SetRows(6); //設定行數
m_FlexGrid.put_Cols(4);//設定列數
m_FlexGrid.put_Rows(6); //設定行數
3. 設定固定行數和固定列數
m_FlexGrid.SetFixedRows(1); //設定固定行數為1行
m_FlexGrid.SetFixedCols(0); //設定固定列數為0列
m_FlexGrid.put_FixedRows(1);
m_FlexGrid.put_FixedCols(0);
4. 設定列寬、行高
m_FlexGrid.SetColWidth(1,1500); //設定列號為1的列寬為1500
m_FlexGrid.SetRowHeight(2,300); //設定行號為2的行高為300
CRect rect;
m_FlexGrid.GetWindowRect(&rect);
m_FlexGrid.put_ColWidth(0,rect.Width()*2); //設定每一列按等距離分佈,比列可以調
m_FlexGrid.put_ColWidth(1,rect.Width()*2);
m_FlexGrid.put_ColWidth(2,rect.Width()*2);
m_FlexGrid.put_ColWidth(3,rect.Width()*2);
m_FlexGrid.put_ColWidth(4,rect.Width()*2);
5. 設定文字對齊方式
m_FlexGrid.SetColAlignment(1,4); //設定列號為1的文字對齊方式
m_FlexGrid.put_ColAlignment(1,6);
引數對應描述為:
0 單元內容頂部左對齊。
1 單元內容中間左對齊。對字串的預設設定值。
2 單元內容底部左對齊。
3 單元內容頂部居中。
4 單元內容中間居中。
5 單元內容底部居中。
6 單元內容頂部右對齊。
7 單元內容中間右對齊。對數字的預設設定值。
8 單元內容底部右對齊。
9 單元內容一般對齊方式。對字串中間左對齊而對數值中間右對齊。
6. 設定表頭和單元格內容
m_FlexGrid.put_TextArray(0,"Head1"); //設定表頭(第1列)內容為“Head1”
m_FlexGrid.put_TextMatrix(1,1,"Text"); //設定單元格(行號1列號1)內容為“Text”
CString HeadStr=_T("Pixel|Average|Max|Min|RMS");//一次性設定控制元件標題
m_FlexGrid.put_FormatString(HeadStr);
7. 增加一行
m_FlexGrid.AddItem("AddString",(COleVariant)(3L)); //在行號為3的位置增加一行
8. 合併單元格
for(int i=0;i<4;i++)
m_FlexGrid.SetTextMatrix(5,i,"合計"); //將行號為5、列號從0到4的單元格內容設為相同“合計”
m_FlexGrid.SetMergeCells(2); //設定單元格合併方式(下述)
m_FlexGrid.SetMergeRow(5,TRUE); //設定要合併的行
for(int i=0;i<4;i++)
m_FlexGrid.put_TextMatrix(5,i,"合計");//將行號為5、列號從0到4的單元格內容設為相同“合計”
m_FlexGrid.put_MergeCells(2);//設定單元格合併方式(下述)
m_FlexGrid.put_MergeRow(5,TRUE);//設定要合併的行
SetMergeCells/put_MergeRow函式的引數值如下:
0: flexMergeNever 預設的選項,就是不合並
1: flexMergeFree 不規則的合併
2: flexMergeRestrictRows 行合併
3: flexMergeRestrictColumns 列合併
4: flexMergeRestrictBoth 行,列都合併
注意只有單元格內容相同時才能進行合併操作。
下面部分對控制元件的可編輯因為目前專案無此需求,故也未驗證,直接轉載留存在此。
9. 製作可編輯的FlexGrid控制元件
放置一個Edit控制元件,繫結成員變數為m_Edit,並設定初始狀態為不可見。
響應FlexGrid控制元件的Click事件:
void CBlackBKDlg::OnClickMsflexgrid()
{
long lCol=m_FlexGrid.GetColSel(); //獲取點選的行號
long lRow=m_FlexGrid.GetRowSel(); //獲取點選的列號
if(lRow>m_FlexGrid.GetRows() || lRow==0) //判斷點選是否有效
return;
CRect rect;
m_FlexGrid.GetWindowRect(&rect); //獲取FlexGrid控制元件的視窗矩形
ScreenToClient(&rect); //轉換為客戶區矩形
CDC* pDC=GetDC();
//MSFlexGrid 控制元件的函式的長度單位是“緹(twips)”,需要將其轉化為畫素,1440 緹 = 1 英寸
//計算象素點和緹的轉換比例
int nTwipsPerDotX=1440/pDC->GetDeviceCaps(LOGPIXELSX);
int nTwipsPerDotY=1440/pDC->GetDeviceCaps(LOGPIXELSY);
//計算選中格的左上角的座標(象素為單位)
long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY;
long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX;
//計算選中格的尺寸(象素為單位)。加1是實際除錯中,發現加1後效果更好
long width = m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX+1;
long height = m_FlexGrid.GetRowHeight(lRow)/nTwipsPerDotY+1;
//形成選中個所在的矩形區域
CRect rc(x,y,x+width,y+height);
//轉換成相對對話方塊的座標
rc.OffsetRect(rect.left+1,rect.top+1);
CString strValue=m_FlexGrid.GetTextMatrix(lRow,lCol); //獲取單元格內容
m_Edit.ShowWindow(SW_SHOW); //顯示控制元件
m_Edit.MoveWindow(rc); //改變大小並移到選中格位置
m_Edit.SetWindowText(strValue); //顯示文字
m_Edit.SetFocus(); //獲取焦點
}
編輯完成釋放焦點之後,將資料寫回單元格。響應Edit控制元件的EN_KILLFOCUS事件:
void CBlackBKDlg::OnKillfocusEditChange()
{
CString strInput;
GetDlgItemText(IDC_EDIT_CHANGE,strInput); //獲取輸入框內容
m_FlexGrid.SetText(strInput); //設定單元格內容
m_Edit.ShowWindow(SW_HIDE); //隱藏輸入框
}