VC CVSFLEXGrid基本用法

來源:互聯網
上載者:User
VC MSFlexGrid基本使用
   

1. 給FlexGrid控制項綁定成員變數:m_FlexGrid。

2. 設定行列數 m_FlexGrid.SetCols(4); //設定列數 m_FlexGrid.SetRows(6); //設定行數

3. 設定固定行數和固定列數 m_FlexGrid.SetFixedRows(1); //設定固定行數為1行

m_FlexGrid.SetFixedCols(0); //設定固定列數為0列

4. 設定列寬、行高 m_FlexGrid.SetColWidth(1,1500); //設定列號為1的列寬為1500

m_FlexGrid.SetRowHeight(2,300); //設定行號為2的行高為300

5. 設定文本對齊 m_FlexGrid.SetColAlignment(1,4); //設定列號為1的文本對齊

參數對應描述為: 0 單元內容頂部靠左對齊。 1 單元內容中間靠左對齊。對字串的預設設定值。 2 單元內容底部靠左對齊。 3 單元內容頂部置中。 4 單元內容中間置中。 5 單元內容底部置中。 6 單元內容頂部靠右對齊。 7 單元內容中間靠右對齊。對數位預設設定值。 8 單元內容底部靠右對齊。 9 單元內容一般對齊。對字串中間靠左對齊而對數值中間靠右對齊。

6. 設定表頭和儲存格內容 m_FlexGrid.SetTextArray(0,"Head1"); //設定表頭(第1列)內容為“Head1”

m_FlexGrid.SetTextMatrix(1,1,"Text"); //設定儲存格(行號1列號1)內容為“Text”

7. 增加一行 m_FlexGrid.AddItem("AddString",(COleVariant)(3L)); //在行號為3的位置增加一行

8. 合併儲存格 for(i=0;i<4;i++)

m_FlexGrid.SetTextMatrix(5,i,"合計"); //將行號為5、列號從0到4的儲存格內容設定成相同“合計”

m_FlexGrid.SetMergeCells(2); //設定儲存格合并方式(下述)

m_FlexGrid.SetMergeRow(5,TRUE); //設定要合并的行

SetMergeCells函數的參數值如下:

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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.