MFC中GridCtrl合并单元格SetCellCombine出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中GridCtrl合并单元格SetCellCombine出错相关的知识,希望对你有一定的参考价值。

部分程序如下,想合并第一行所有单元格
try
m_Grid.SetRowCount(20);
m_Grid.SetColumnCount(9);

catch (CMemoryException* e)

e->ReportError();
e->Delete();
return;

CRect rect;
GetDlgItem(IDC_GRID)->GetClientRect(&rect);
for (int i=0;i<m_Grid.GetRowCount();i++)

for (int j=0;j<m_Grid.GetColumnCount();j++)

m_Grid.SetRowHeight(i,rect.Height()/m_Grid.GetRowCount()); //设置各行高
m_Grid.SetColumnWidth(j,rect.Width()/m_Grid.GetColumnCount()); //设置各列宽


Item.mask = GVIF_TEXT|GVIF_FORMAT;
int row=0;
int col= 0;

m_Grid.SetCellCombine(row,0,0,8,TRUE);
Item.row = row;
Item.col = col;
Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE;
Item.szText.Format(_T("XXXX"));
m_Grid.SetItem(&Item);
程序中断,int CGridCtrl::GetRowHeight(int nRow) const
nRow=-1
不能理解,为什么会出现这种情况,望高人指点

参考技术A ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。
控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。
因此,开发面向Web的ActiveX控件比开发桌面的控件还要简单些,所复杂的是如何将该控件很好地嵌入主页,使用户能正常浏览。

如何在 listcontrol mfc 中编辑单元格?

【中文标题】如何在 listcontrol mfc 中编辑单元格?【英文标题】:How to edit cell in listcontrol mfc? 【发布时间】:2013-11-23 23:44:35 【问题描述】:

我需要在第二列中编辑我的文本,并且我不想使用 MFC 网格控件。 我如何通过踢它来编辑单元格。 请给我一个简单的例子。

我有什么:

void CTab1::DoDataExchange(CDataExchange* pDX)

    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST1, m_LISTC);


BEGIN_MESSAGE_MAP(CTab1, CDialogEx)
    ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST1, OnEndEdit)
END_MESSAGE_MAP()


// CTab1 message handlers
BOOL CTab1::OnInitDialog()

    CDialogEx::OnInitDialog();
    m_LISTC.InsertColumn(0, L"Buttons", LVCFMT_LEFT,50);
    m_LISTC.InsertColumn(1, L"Time", LVCFMT_LEFT, 50);
    m_LISTC.InsertColumn(2, L"State", LVCFMT_LEFT, 40);

    for (int i = 0; i < 12; ++i)
    
        CString F;
        F.Format(L"F%d", i + 1);
        m_LISTC.InsertItem(m_LISTC.GetItemCount(), F, -1);
        int row = 1;
        int col = 10;
        m_LISTC.SetItemState(row, col, m_LISTC.GetItemState(row, col) | LVN_ENDLABELEDIT);
    
    return TRUE;


void CTab1::OnEndEdit(NMHDR* pNMHDR, LRESULT* pResult)

    NMLVDISPINFO* pLVDI = reinterpret_cast< NMLVDISPINFO* >(pNMHDR);
    if (pLVDI->item.pszText)
        m_LISTC.SetItemText(1, 0, pLVDI->item.pszText);
    *pResult = 0;

但它不起作用。所以我仍然可以编辑第二列的单元格。

【问题讨论】:

这个问题离题了。如果您要求提供代码,则需要演示并显示对问题域的最低限度的了解。你试过什么?为什么你没有成功?您遇到了哪些具体的编程问题? 好的,我会编辑我的问题 完成。我编辑了我的问题 LVS_EDITLABELS 是 List-View Window Style。您必须在创建列表视图时设置它。您要查找的通知消息是LVN_ENDLABELEDIT 是的。固定的。但不工作:/ 【参考方案1】:

很遗憾,不能使用 LVS_EDITLABELS 和 LVN_ENDLABELEDIT 来编辑除第一列之外的其他列。

我只需要在那个单元格上创建编辑控件...

【讨论】:

以上是关于MFC中GridCtrl合并单元格SetCellCombine出错的主要内容,如果未能解决你的问题,请参考以下文章

在excel中怎么合并单元格?

HTMLHTML 表格 ③ ( 合并单元格 | 跨行合并 | 跨列合并 | 单元格合并顺序 | 跨行设置 rowspan 属性 | 跨列设置 colspan 属性 )

Markdown表格中换行、合并单元格

C#Winform中DataGridView合并单元格的问题?

网页中表格如何合并单元格

在HTML表格中怎么合并单元格?