版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、GridCtrlEx控件FAQ目錄GridCtrlEx控件FAQ . 11. 一個(gè)固定用法 . 12. 可以控制單元格是否可以編輯 . 33. 在選定一個(gè)單元格時(shí),選擇整行 . 44. 說明添加固定列頭和固定行頭的方法 . 45. 說明填寫表格內(nèi)容的方法 . 46. 在選定一行時(shí)有響應(yīng)函數(shù) . 57. 由雙擊的響應(yīng)函數(shù) . 58. 由響應(yīng)右鍵點(diǎn)擊的函數(shù) . 59. 可以方便的刪除和添加固定列頭 . 710.可以設(shè)置、刪除、添加固定行頭 . 711.可以在第一個(gè)單元格中加入Check控件 . 712.可設(shè)表格的背景和字體,可設(shè)單元格的顏色和字體 . 813.可以方便的添加或者刪除一行 . 814
2、.可以由程序選定某一行 . 915.可以由程序自動(dòng)滾動(dòng)到某一行,顯示在用戶面前 . 1016.說明添加排序功能的方法 . 1017.說明在單元格中添加或者改變圖形的方法 . 1118.遍歷所有的選中行的方法 . 1119.設(shè)置控件允許單選或者多選的方法 . 1220.設(shè)置不要焦點(diǎn)和焦點(diǎn)外框的方法 . 1221.CGridCtrl的擴(kuò)展 . 131. 一個(gè)固定用法一個(gè)常用的用法是將CridCtrl當(dāng)做ListCtrl那樣的用,同時(shí)又增加了即時(shí)編輯的功能: 以下假設(shè)在一個(gè)Dlg增加一個(gè)GridCtrl的控件:我們可以按以下步驟進(jìn)行:第一步:表格控件加到工程中去可以有兩種方法:可以使用control
3、s panel中的custom control添加,添加后如下設(shè)置:1也可以用菜單ViewResource Symbol添加一個(gè)ID號(hào)(適用于Create出來的GridCtrl) 第二步:在Dlg的頭文件中加入第三步:Create控件(如果是用controls panel中的custom control添加的可以跳過)在Dlg的OnCreate函數(shù)中添加m_Grid.Create()代碼第四步:創(chuàng)始化控件在DoDataExchange中添加DDX_GridControl(pDX, IDC_GRID, m_Grid);在Dlg的OnInitialDialog中添加如下代碼:/設(shè)置控件類似于Lis
4、tCtrl的表現(xiàn)m_Grid.SetListMode(TRUE);/設(shè)置控件顏色,這里GetDefaultCell的兩個(gè)參數(shù)分別表示是否是固定行或者是固定列。如果不設(shè)定,缺省的顏色為白色。m_Grid.GetDefaultCell(FALSE, FALSE)->SetBackClr(Color);/設(shè)置控件的固定行為一行,一般是必須的m_Grid.SetFixedRowCount(1);/設(shè)置控件的固定行或者固定列不能被選中m_Grid.SetFixedColumnSelection(FALSE);m_Grid.SetFixedRowSelection(FALSE);/設(shè)置控件是否允許隱
5、藏行或者列m_Grid.EnableColumnHide(FALSE);m_Grid.EnableRowHide(FALSE);/設(shè)置控件是否允許編輯m_Grid.SetEditable(FALSE);/設(shè)置控件是否允許選擇m_Grid.EnableSelection(TRUE);/設(shè)置控件是否允許點(diǎn)擊表頭排序m_Grid.SetHeaderSort(TRUE);/設(shè)置控件是否允許多選或者單選m_Grid.SetSingleRowSelection(TRUE);m_Grid.SetSingleColSelection(TRUE);/設(shè)置控件的初始行數(shù)和列數(shù)m_Grid.SetRowCount(
6、1);m_Grid.SetColumnCount(4);/設(shè)置控件是否允許自動(dòng)調(diào)整行列大小2m_Grid.SetRowResize(FALSE);m_Grid.SetColumnResize(FALSE);/設(shè)置控件不要焦點(diǎn)和焦點(diǎn)外框m_Grid.SetTrackFocusCell(FALSE); m_Grid.SetFrameFocusCell(FALSE);第五步:設(shè)置控件的內(nèi)容強(qiáng)烈建議添加以下Dlg的兩個(gè)成員函數(shù):void FillColumn();void FillItem(); /具體內(nèi)容見4 /具體內(nèi)容見5第六步:設(shè)置控件的響應(yīng)具體可見6、7、8其它在使用過程中經(jīng)常需要由程式設(shè)定選
7、中行,請(qǐng)始終連續(xù)使用以下兩個(gè)語句:m_Grid.SetSelectedRange(nRow,0, nRow,m_Grid.GetColumnCount()-1) m_Grid.EnsureVisible(nRow, 0);其中nRow為要選中的那一行,強(qiáng)烈建議不要將這兩句語句放在FillItem()中,這樣會(huì)導(dǎo)致不靈活2. 可以控制單元格是否可以編輯 可以設(shè)定整張表格為只讀void CGridCtrl:SetEditable(BOOL bEditable = TRUE)參數(shù)設(shè)為FALSE,則整張表格為只讀。 也可以設(shè)定某個(gè)單元格為只讀BOOL CGridCtrl:SetItemState(in
8、t nRow, int nCol, UINT state) 一般需配合使用UINT CGridCtrl:GetItemState(int nRow, int nCol) const 比如將單元格(1,1)設(shè)為只讀CGridCtrlObject.SetItemState(1,1, m_Grid.GetItemState(1,1) | GVIS_READONLY); 將單元格(1,1)設(shè)為正常CGridCtrlObject.SetItemState(1,1, m_Grid.GetItemState(1,1) & GVIS_READONLY); 單元格可用的狀態(tài)常量GVIS_FOCUSED
9、/ Cell has focusGVIS_SELECTED / Cell is selected GVIS_DROPHILITED / Cell is drop highlighted GVIS_READONLY / Cell is read-only and cannot be edited GVIS_FIXED / Cell is fixed GVIS_FIXEDROW / Cell is part of a fixed row GVIS_FIXEDCOL / Cell is part of a fixed column GVIS_MODIFIED / Cell has been modi
10、fied33. 在選定一個(gè)單元格時(shí),選擇整行void CGridCtrl:SetListMode(BOOL bEnableListMode = TRUE) 先設(shè)定表格為L(zhǎng)istMode4. 說明添加固定列頭和固定行頭的方法CGridCtrlObject.SetFixedColumnCount(NumberFixCol); CGridCtrlObject.SetFixedRowCount(NumberFixRow); CGridCtrlObject.SetFixedColumnSelection(FALSE);CGridCtrlObject.SetFixedRowSelection(FALSE)
11、;添加固定表頭的方法如下:for(int i=0; i<m_ nColumnNum; i+) m_Grid.SetColumnWidth(i, nWidthi); i=0; m_Grid.SetItemText(0,i+,"第一列"); m_Grid.SetItemText(0,i+,"第二列"); m_Grid.SetItemText(0,i+,"第三列"); const int nColumnNum=3; m_Grid.SetColumnCount(nColumnNum); int nWidthnColumnNum; nWi
12、dth0=60; nWidth1=120; nWidth2=120; m_Grid.SetFixedRowCount(1); /設(shè)定固定行數(shù)為1行5. 說明填寫表格內(nèi)容的方法簡(jiǎn)單的方法是調(diào)用BOOL CGridCtrl:SetItemText(int nRow, int nCol, LPCTSTR str) 例如CGridCtrlObject.SetItemText(1,1, _T("12345");4注: 復(fù)雜但更靈活的方法是采用如下的方法: GV_ITEM Item;/一個(gè)結(jié)構(gòu) 設(shè)定這個(gè)結(jié)構(gòu)的成員參數(shù),然后將這個(gè)結(jié)構(gòu)傳遞給表格, CGridCtrlObject.SetI
13、tem(&Item);typedef struct _GV_ITEM int row,col; / Row and Column of itemUINT mask; / Mask for use in getting/setting cell data UINT state; / cell state (focus/hilighted etc)UINT nFormat; / Format of cell. Default imaplentation/ used CDC:DrawText formatsCString szText; / Text in cellint iImage; /
14、 index of the list view items iconCOLORREF crBkClr; / Background colour (or CLR_DEFAULT)COLORREF crFgClr; / Forground colour (or CLR_DEFAULT)LPARAM lParam; / 32-bit value to associate with itemLOGFONT lfFont; / cell font GV_ITEM;例如以下代碼可以設(shè)置表格內(nèi)容:m_GridCtrl.SetRowCount(3);m_GridCtrl.SetItemText(1, 0, &
15、quot;第一格"); m_GridCtrl.SetItemText(1, 1, "第二格"); m_GridCtrl.SetItemText(1, 2, "第三格"); m_GridCtrl.SetItemText(2, 0, "第四格"); m_GridCtrl.SetItemText(2, 1, "第五格"); m_GridCtrl.SetItemText(2, 2, "第六格"); m_GridCtrl.ExpandColumnsToFit();6. 在選定一行時(shí)有響應(yīng)函數(shù)7.
16、 由雙擊的響應(yīng)函數(shù)8. 由響應(yīng)右鍵點(diǎn)擊的函數(shù)A:當(dāng)進(jìn)行單擊,雙擊或右擊單元格等操作時(shí),表格會(huì)發(fā)送響應(yīng)的消息,可以在父窗口添加處理消息的函數(shù),做法如下:GVN_BEGINDRAG / Sent when dragging startsGVN_BEGINLABELEDIT / Sent when inplace editing startsGVN_ENDLABELEDIT / Sent when inplace editing stops5GVN_SELCHANGING / Sent just before cell selection changesGVN_SELCHANGED / Sent a
17、fter cell selection changesGVN_GETDISPINFO / A request for cell information when the grid is / in virtual modeGVN_ODCACHEHINT / Cache hint when in virtual mode右鍵點(diǎn)擊,按鍵盤響應(yīng)消息在擴(kuò)展中實(shí)現(xiàn)了,可參見條款21以下需要手工添加H文件中:/AFX_MSG afx_msg void OnGridDblClick(NMHDR *pNotifyStruct, LRESULT* pResult); afx_msg void OnGridClic
18、k(NMHDR *pNotifyStruct, LRESULT* pResult); DECLARE_MESSAGE_MAP() / Generated message map functions /AFX_MSG(CDlgSectionLib) afx_msg void OnGridEndSelChange(NMHDR *pNotifyStruct, LRESULT* pResult);CPP文件中:BEGIN_MESSAGE_MAP(CDlgSectionLib, CDialog)END_MESSAGE_MAP()然后自定義響應(yīng)函數(shù)void CDlgSectionLib:OnGridDbl
19、Click(NMHDR *pNotifyStruct, LRESULT* pResult) NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;pItem->iRow, pItem->iColumn;/得到當(dāng)前行、列/ This structure sent to Grid's parent in a WM_NOTIFY messagetypedef struct tagNM_GRIDVIEW NMHDR hdr;int iRow;int iColumn; NM_GRIDVIEW; /AFX_MSG_MAP(CDlgSecti
20、onLib) /AFX_MSG_MAP ON_NOTIFY(NM_DBLCLK, IDC_GRID, OnGridDblClick) ON_NOTIFY(NM_CLICK, IDC_GRID, OnGridClick) ON_NOTIFY(GVN_SELCHANGED, IDC_GRID, OnGridEndSelChange)typedef struct tagNMHDR HWND hwndFrom; / handle of control sending messageUINT idFrom;/ identifier of control sending messageUINT code;
21、 / notification code; see below6 NMHDR;NM_CLICK The user has clicked the left mouse button within the control.NM_DBLCLK The user has double-clicked the left mouse button within the control. NM_KILLFOCUS The control has lost the input focus.NM_OUTOFMEMORY The control could not complete an operation b
22、ecause there is not enough memory available.NM_RCLICK The user has clicked the right mouse button within the control. NM_RDBLCLK The user has double-clicked the right mouse button within the control.NM_RETURN The control has the input focus, and the user has pressed the ENTER key.NM_SETFOCUS The con
23、trol has received the input focus.9. 可以方便的刪除和添加固定列頭10.可以設(shè)置、刪除、添加固定行頭A:參考(4)&(5)刪除可以用以下一些函數(shù)BOOL DeleteColumn(int nColumn);BOOL DeleteRow(int nRow);BOOL DeleteNonFixedRows();BOOL DeleteAllItems();11.可以在第一個(gè)單元格中加入Check控件A:#include "NewCellTypes/GridCellCheck.h"/包含頭文件BOOL CGridCtrl:SetCellT
24、ype(int nRow, int nCol, CRuntimeClass*pRuntimeClass);比如:CGridCtrlObject.SetCellType(1,1, RUNTIME_CLASS(CGridCellCheck);712.可設(shè)表格的背景和字體,可設(shè)單元格的顏色和字體 設(shè)置表格的顏色CGridCtrlObject.GetDefaultCell(FALSE, ALSE)->SetBackClr(RGB(xxx,xxx,xxx); 下面的函數(shù)均可以調(diào)用: virtual void CGridCtrl:SetTextClr(COLORREF clr);virtual vo
25、id CGridCtrl:SetBackClr(COLORREF clr);virtual void CGridCtrl:SetFont(const LOGFONT* plf);設(shè)置單元格的背景顏色和前景顏色BOOL CGridCtrl:SetItemBkColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT)BOOL CGridCtrl:SetItemFgColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT)BOOL CGridCtrl:SetItemFont(int nRow, int n
26、Col, LOGFONT*lf)顏色:COLORREF clr = RGB(xxx,xxx,xxx);字體:CFont* pFont = m_Grid.GetFont();LOGFONT lf;pFont->GetLogFont(&lf);memcpy(lf.lfFaceName, _T("Arial"), 6);lf.lfEscapement = 900;lf.lfOrientation = 900;關(guān)于單元格的格式都可以通過下述方法設(shè)定,同前面關(guān)于設(shè)置單元格內(nèi)容(4)的方法 GV_ITEM Item設(shè)置單元格格式Item.crBkClr = ?;Item.
27、crFgClr = ?;Item.lfFont=?;SetItem(&Item); Item.mask |= (GVIF_BKCLR|GVIF_FGCLR);13.可以方便的添加或者刪除一行int CGridCtrl:InsertColumn(LPCTSTR strHeading,UINT nFormat, int nColumn = -1)int CGridCtrl:InsertRow(LPCTSTR strHeading, int nRow = -1)8BOOL DeleteColumn(int nColumn)BOOL DeleteRow(int nRow)例如:CGridCtr
28、lObject.InsertRow(_T("Newest Row"), nRow);CGridCtrlObject.DeleteRow(nRow);CGridCtrlObject.Invalidate();/這句是必需的。14.可以由程序選定某一行可以調(diào)用以下函數(shù):void SelectRow (int row) /該函數(shù)在擴(kuò)展中實(shí)現(xiàn)了,具體可參見條款21 也可以調(diào)用以下函數(shù):void SetSelectedRange(const CCellRange& Range, BOOL bForceRepaint = FALSE);void SetSelectedRange
29、(int nMinRow, int nMinCol, int nMaxRow, int nMaxCol, BOOL bForceRepaint = FALSE);CCellID SetFocusCell(CCellID cell);CCellID SetFocusCell(int nRow, int nCol);class CCellIDpublic:int row, col; / The zero based row and column of the cell.CCellID(int nRow = -1, int nCol = -1)int IsValid();int operator=(
30、const CCellID& rhs);int operator!=(const CCellID& rhs);也可以調(diào)用BOOL CGridCtrl:SetRowFocusAndSelection(int nRow,int nCol=0)這個(gè)函數(shù)選中第nRow行,同時(shí)將焦點(diǎn)置于第nRow行0,第nCol列。成功則返回TRUE,失敗則返回FALSE.915.可以由程序自動(dòng)滾動(dòng)到某一行,顯示在用戶面前 調(diào)用void CGridCtrl:AutoScrollToRow(int nRow)也可以使用void EnsureVisible(CCellID &cell)void En
31、sureVisible(int nRow, int nCol);16.說明添加排序功能的方法調(diào)用如下函數(shù):void CGridCtrl:SetListMode(BOOL bEnableListMode = TRUE)void CGridCtrl:SetHeaderSort(BOOL bSortOnClick = TRUE)void CGridCtrl:SetCompareFunction(PFNLVCOMPARE pfnCompare)如果想實(shí)現(xiàn)排序,必須先調(diào)用CGridCtrlObject.SetListMode(TRUE);CGridCtrlObject.SetHeaderSort(TRU
32、E);然后設(shè)置比較函數(shù):CGridCtrlObject.SetCompareFunction(CGridCtrl:pfnCellNumericCompare);/數(shù)值排序 CGridCtrlObject.SetCompareFunction(CGridCtrl: pfnCellTextCompare);/字符排序 CGridCtrlObject.SetCompareFunction(NULL);/調(diào)用缺省的排序模式,即字符排序 字符排序和數(shù)值排序是控件已提供的排序模式,也可以自定義排序函數(shù),例子如下: int CALLBACK pfnCellCompare(LPARAM lParam1, LP
33、ARAM lParam2, LPARAM lParamSort) 比較函數(shù)必須是全局的或是靜態(tài)的。int CALLBACK MyClass:pfnCellNumericCompare(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)if (nValue1 < nValue2) else return 1;10 return -1; return 0; else if (nValue1 = nValue2) int nValue1 = _ttol(pCell1->GetText(); int nValue2 = _ttol(pCell2
34、->GetText(); CGridCellBase* pCell1 = (CGridCellBase*) lParam1; CGridCellBase* pCell2 = (CGridCellBase*) lParam2; if (!pCell1 | !pCell2) return 0;17.說明在單元格中添加或者改變圖形的方法 也可以這樣實(shí)現(xiàn)頭文件CImageList實(shí)現(xiàn)文件中Create(MAKEINTRESOURCE(BitMap的ID如:IDB_IMAGES), 16, 1, RGB(255,255,255);CGridCtrlObject.SetImageList然后調(diào)用BO
35、OL CGridCtrl:SetItemImage(int nRow, int nCol, int iImage) 也可以采用(4)中設(shè)置單元格的文字內(nèi)容的方法:GV_ITEM Item;Item.iImage =index;Item.mask |= (GVIF_IMAGE);CGridCtrlObject.SetItem(&Item);18.遍歷所有的選中行的方法GVNI_FOCUSED / Search for focus cellGVNI_SELECTED / Search for selected cellsGVNI_DROPHILITED / Search for drop
36、highlighted cellsGVNI_READONLY / Search for read-only cellsGVNI_FIXED / Search for fixed cellsGVNI_MODIFIED / Search for modified cellsGVNI_ABOVE / Search above initial cellGVNI_BELOW / Search below initial cellGVNI_TOLEFT / Search to the left of the initial cell GVNI_TORIGHT / Search to the right of the initial cell GVNI_ALL / Search all cells in the grid starting from / the given cellGVNI_AREA / Search all cells below and to the right of / the given ce
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版八年級(jí)上冊(cè)英語第1至第10單元的重點(diǎn)短語歸納
- 2024幼兒園教師繼續(xù)教育與進(jìn)修培訓(xùn)合同范本3篇
- 2025年度航空航天裝備制造合同示范文本3篇
- 2024年共同撫養(yǎng)子女責(zé)任協(xié)議及離婚協(xié)議書3篇
- 2024手機(jī)電池更換與回收利用合同2篇
- 2024早教中心專業(yè)師資培訓(xùn)與場(chǎng)地租賃服務(wù)合同3篇
- 2024年石油化工企業(yè)彩鋼隔熱工程合同
- 2024棄土場(chǎng)施工項(xiàng)目施工期風(fēng)險(xiǎn)評(píng)估與應(yīng)急預(yù)案合同范本3篇
- 2024袋類玩具購(gòu)銷合同范本
- 2024年透支延期還款合同
- 內(nèi)科胃癌護(hù)理查房
- 2025年教師資格證考試教育理論基礎(chǔ)知識(shí)必考的250個(gè)重點(diǎn)
- 《海關(guān)業(yè)務(wù)》課件-項(xiàng)目三 商品歸類
- 2024年領(lǐng)導(dǎo)干部任前廉政知識(shí)考試測(cè)試題庫(kù)及答案
- 2023-2024學(xué)年浙江省寧波市鎮(zhèn)海區(qū)四年級(jí)(上)期末數(shù)學(xué)試卷
- 新員工入職培訓(xùn)員工手冊(cè)
- 北京生命科技研究院 筆試
- 腸梗阻課件完整版本
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 蔣詩(shī)萌小品《誰殺死了周日》臺(tái)詞完整版
- 報(bào)價(jià)單(報(bào)價(jià)單模板)
評(píng)論
0/150
提交評(píng)論