关于VS2008的MFCGridCtrl的使用方法-冻结首行首列
1、新建基于Dilaog的MFC工程GridCtrlTest
2、從CodeProject上(http://www.codeproject.com/KB/miscctrl/gridctrl.aspx)下載GridCtrl_src并且將該目錄下所有的文件添加到工程中,并編譯。
VS2008編譯報錯:gridctrltest\memdc.h(26): error C2011: “CMemDC”:“class”類型重定義
解決:重命名CMemDC為GCMemDC(或者任意其他),修改MemDC.h及GridCtrl.cpp所有用到的CMemDC項。
重新編譯則通過。
3、在對話框CGridCtrlTestDlg中增加Custom Control,然后對該控件添加變量,為m_pGrid。
并設(shè)置Custom Control的屬性: 注意:Class項的值一定要是MFCGridCtrl,不然就無法將控件關(guān)聯(lián)起來。右鍵添加控件變量-》輸入變量類型:CGridCtrl 變量名:m_pGrid
?4、在文件GridCtrlTestDlg.h為類CGridCtrlTestDlg增加成員
#pragma once
#include "GridCtrl.h" // CGridCtrlTestDlg 對話框
class CGridCtrlTestDlg : public CDialogEx
{
// 構(gòu)造
public:
CGridCtrlTestDlg(CWnd* pParent = NULL); // 標準構(gòu)造函數(shù)
??? CGridCtrl m_pGrid;//右鍵添加變量
??? void GridCtrlInit();//初始化 // 對話框數(shù)據(jù)
enum { IDD = IDD_GRIDCTRLTEST_DIALOG };?
5、增加映射,這個添加控件的時候就已經(jīng)實現(xiàn)
void CGridCtrlTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MY_GRIDCTRL, m_pGrid);
}
6、在OnInitDialog函數(shù)里初始化GridCtrl
BOOL CGridCtrlTestDlg::OnInitDialog()
{CDialog::OnInitDialog();
// 將“關(guān)于...”菜單項添加到系統(tǒng)菜單中。
// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設(shè)置此對話框的圖標。當應(yīng)用程序主窗口不是對話框時,框架將自動
// ?執(zhí)行此操作
SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標
SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標
// TODO: 在此添加額外的初始化代碼
GridCtrlInit();//控件顯示
return TRUE; ?// 除非將焦點設(shè)置到控件,否則返回 TRUE
}
文件最后添加GridCtrlInit()實現(xiàn)函數(shù)
void CGridCtrlTestDlg::GridCtrlInit()
{
m_pGrid.SetEditable(TRUE);
m_pGrid.SetTextBkColor(RGB(0xFF, 0xFF, 0xFF));//白色背景
m_pGrid.SetRowCount(17);//初始化為17行
m_pGrid.SetColumnCount(4);//4列
m_pGrid.SetFixedRowCount(1);//表頭為1行
m_pGrid.SetFixedColumnCount(1);//表頭為1列
for ( int row = 0; row < m_pGrid.GetRowCount(); row++)
{
for (int col = 0; col < m_pGrid.GetColumnCount(); col++)
{
//設(shè)置表格顯示屬性
GV_ITEM item;
item.mask = GVIF_TEXT | GVIF_FORMAT;
item.row = row;
item.col = col;
m_pGrid.SetRowHeight(row, 25);//設(shè)置各行高
m_pGrid.SetColumnWidth(0,64);//設(shè)置0列寬
m_pGrid.SetColumnWidth(col,120);//設(shè)置各列寬
if (row == 0 && col == 0)//第(0,0)格
{
item.nFormat = DT_CENTER|DT_WORDBREAK;
item.strText.Format(_T("序號"),col);
}
else if (row < 1) //設(shè)置0行表頭顯示
{ ? ? ? ?
item.nFormat = DT_CENTER|DT_WORDBREAK;
if(col == 1)
{
item.strText.Format(_T("雙點遙信"),col);
}
if(col == 2)
{
item.strText.Format(_T("單點遙信1"),col);
}
if(col == 3)
{
item.strText.Format(_T("單點遙信2"),col);
}
//item.strText.Format(_T(" 項目%d"),col);
}
else if (col < 1) //設(shè)置0列表頭顯示
{
if(row< m_pGrid.GetRowCount())
{
item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
item.strText.Format(_T("%d"),row-1);
}
}
else
{
item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
item.strText.Format(_T(""),2);
}
?m_pGrid.SetItem(&item);?
}
}
}
7、運行結(jié)果顯示:
8、代碼:
http://download.csdn.net/detail/i_love_u_5/9283441
總結(jié)
以上是生活随笔為你收集整理的关于VS2008的MFCGridCtrl的使用方法-冻结首行首列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2023年广西大学农村发展专业上岸学长经
- 下一篇: Linux中的sda, sdb, sdc