BCG控件---Grid消息响应函数

代码中所使用的Grid控件是:class CGridCtrlBCG : public CBCGPGridCtrl{...}
CGridCtrlBCG m_wndSrvLayer;

该控件中BCGPGN_SELCHANGED BCGPGN_SELCHANGING都会发送两次消息,两次消息的不同地方可以根据a处提到参数区分,第一次值是0,第二次是1
控件第一次打开后,做selchanged操作时只发送一次消息并且pNMGrid->lParam值为1,所以只需要处理LParam为1 的消息即可。
void CSdhAddServiceLayerDlg::OnSelChangedGrid(NMHDR *pNotifyStruct, LRESULT *pResult)
{
	BCGPGRID_NOTIFICATION *pNMGrid = reinterpret_cast<BCGPGRID_NOTIFICATION *>(pNotifyStruct);
	if (NULL != pNMGrid)
	{
		int iCurCol = pNMGrid->nCol;
		if (0 == pNMGrid->lParam || colSel == iCurCol)                      ---------a处
		{
			//*pResult = 0;
			return;
		}

		int iCurRow = pNMGrid->nRow;
		BOOL bCheckStatus = FALSE;
		CBCGPGridRow *pRow = m_wndSrvLayer.GetRow(iCurRow);
		if (NULL != pRow)
		{
			CBCGPGridItem *pCheckItem = pRow->GetItem(colSel);
			if (NULL != pCheckItem)
			{
				bCheckStatus = (bool)pCheckItem->GetValue();
			}

			pCheckItem->SetValue(_variant_t(!bCheckStatus));
		}
	}

	*pResult = 0;
}

BCGPGN_SELCHANGED会发两次 ,切忌。

之前为了解决这样的问题,改用了ON_CLICK或者WM_LBUTTONDOWN都没有效果,原因是该Grid是嵌入到Dialog窗口的,所以暂时不响应Grid的消息哦。

你可能感兴趣的:(null,Class,dialog)