1. 程式人生 > >msflexgrid在vs2010中的基本引數對照 VC6.0

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);                           //隱藏輸入框
             }