我想让这个条件实现这个效果就是说,有这么一个表格,当你点是的时候他就回答勾,当你在点的时候勾就回去掉。
若全选可见时,可见部分全部是:是并且打钩
若全选可写时,可见可写,包括是否可见都 是:是并且打钩。
若点A为可见,打钩,则A的可写部分,可以是可写,也可以是不可写。
若点A为不可见,则A的可写部分也不可写。
若点A为可写,则A的可见不部分必为可见,并且打钩。
若点A为不可写,则A的可见不部分为可见,也可为不可见。意思就是说当鼠标点上的时候就会选中,当在点一次的话就会去掉,也就是原来的反。我的自己程序在这但是存在一点错误,
就是说,当你一下选好多格子的时候,他就会出现不可见情况下,可写。
我的程序师这样的:void CDlgRightSetting::OnGridClickedAttrRight(NMHDR *pNotifyStruct, LRESULT* pResult)
{
NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
CGridCellCheck *pCell = (CGridCellCheck*)m_cGridAttr.GetCell(pItem->iRow,pItem->iColumn);
CGridCellCheck *pCell1 = (CGridCellCheck*)m_cGridAttr.GetCell(pItem->iRow,1);
CGridCellCheck *pCell2 = (CGridCellCheck*)m_cGridAttr.GetCell(pItem->iRow,2);
CGridCellCheck *pCell3 = (CGridCellCheck*)m_cGridAttr.GetCell(0,1);
CGridCellCheck *pCell4 = (CGridCellCheck*)m_cGridAttr.GetCell(0,2);
if(pCell1 == NULL || pCell2 == NULL)
return;
if (pItem->iRow == 0 && pItem->iColumn >  0)//整体设置可见可写
{
bool bCheck = pCell->GetCheck();
pCell->SetCheck(!bCheck);
SetCheckState(&m_cGridAttr,pItem->iColumn,!bCheck,TRUE);
}
else if (pItem->iRow > 0)
{
pCell3->SetCheck(FALSE);
pCell4->SetCheck(FALSE);
        /*if (pItem-> iColumn ==1)
{
if (!pCell1->GetCheck())
{
 pCell1->SetCheck(FALSE);
         pCell2->SetCheck(FALSE);
     m_cGridAttr.SetItemText(pItem->iRow,1,"否");
           m_cGridAttr.SetItemText(pItem->iRow,2,"否");
}
else if(pCell1->GetCheck() )
{
                 m_cGridAttr.SetItemText(pItem->iRow,1,"是");
}
/*else if (pCell1->SetCheck())
{
                 m_cGridAttr.SetItemText(pItem->iRow,1,"是");
                 pCell2->SetCheck();
     m_cGridAttr.SetItemText(pItem->iRow,2,"是");
                 pCell2->GetCheck(); 
}*/

/*}
        if (pItem-> iColumn ==2)
{
if(pCell2->GetCheck()) 
{
                 m_cGridAttr.SetItemText(pItem->iRow,2,"是");
     pCell1->SetCheck();
     m_cGridAttr.SetItemText(pItem->iRow,1,"是");
                 pCell1->GetCheck(); 
}
/*else if (pCell2->SetCheck())
{
                 m_cGridAttr.SetItemText(pItem->iRow,2,"是");
     pCell1->SetCheck();
     m_cGridAttr.SetItemText(pItem->iRow,1,"否");
                 pCell1->GetCheck();   
}*/
/*else if (!pCell2->GetCheck())
{
 pCell1->SetCheck(FALSE);
 pCell2->SetCheck(FALSE);
                 m_cGridAttr.SetItemText(pItem->iRow,1,"否");
     m_cGridAttr.SetItemText(pItem->iRow,2,"否"); 
}
}*/
if (pItem-> iColumn ==1)
{
            if (!pCell1->GetCheck())
{
 pCell1->SetCheck(FALSE);
         pCell2->SetCheck(FALSE);
     m_cGridAttr.SetItemText(pItem->iRow,1,"否");
           m_cGridAttr.SetItemText(pItem->iRow,2,"否");
}
else if(pCell1->GetCheck() )
{
                 m_cGridAttr.SetItemText(pItem->iRow,1,"是");
}
}

}
m_cGridAttr.Refresh();
m_bAttrFlag = TRUE;
}void CDlgRightSetting::SetCheckState(CGridCtrl * pGrid, int col, BOOL check, BOOL bFirst)
{
if(pGrid == NULL)
return; CGridCellCheck *pCheckCell = NULL;
COLORREF clrModify = RGB(0,128,255);
for (int row = 0; row < pGrid->GetRowCount(); row++)
{
pCheckCell = (CGridCellCheck *)pGrid->GetCell(row, col);
if (pCheckCell == NULL)
continue; pCheckCell->SetCheck(check);
if (check)
{
if(row > 0)
{
    pCheckCell->SetText(_T("是"));
}
}
else
{
if(row > 0)
{
    pCheckCell->SetText(_T("否"));
}
} if(bFirst)
{   
CGridCellCheck *pCheckCell1 = NULL;
if(col == 1)
{
if(row > 0)
{
     pCheckCell1 = (CGridCellCheck *)pGrid->GetCell(row, 2);
    if (pCheckCell1 != NULL && !check)
    {
    pCheckCell1->SetText(_T("否"));
    pCheckCell1->SetCheck(FALSE);
    }
}
}
else if (col == 2)
{
if(row> 0)
{
    pCheckCell1 = (CGridCellCheck *)pGrid->GetCell(row, 1);
    if (pCheckCell1 != NULL && check)
    {
    pCheckCell1->SetCheck(check);
   pCheckCell1->SetText(_T("是"));
    }
}
}
}
}
}