none
切分窗口使用CMFCPropertyGridCtrl,点击后拖选或者双击Value区域,出现Assert。ASSERT(::IsWindow(m_hWnd)) RRS feed

  • 常规讨论

  • 您好!

        有一个问题困扰月余,尝试很多方法仍无法解决。

        1、将主窗口静态切分为一行两列,创建视图Cview1,CView2

        2、将第二列静态切分为两行一列,创建视图Cview2_1,CView2_2

        3、在第二次切分的视图Cview2_1中添加CMFCPropertyGridCtrl

        运行程序,一切正常。但是点击后拖选或者双击CMFCPropertyGridCtrl的Value区域时,出现ASSERT(::IsWindow(m_hWnd))

        跟踪调试,应该是InPlace editing window释放时出现的问题。

        是不是CMFCPropertyGridCtrl的Bug?如果只进行一次切分,直接在Cview1或Cview2上添加CMFCPropertyGridCtrl 则无上述问题。

         请各位专家帮我分析一下问题原因,谢谢。


    2014年6月17日 15:34

全部回复

  • 你好,

    你的问题没能在我的电脑重现,希望你能将你的一些关键性的代码贴出来,例如

    OnCreateClient函数等,让我来帮你看看。

    2014年6月19日 8:39
  • 你好,

    我不知道你的代码是怎么编写的,所以无法重现你的问题。但是根据你的描述,我做了一个简单的test例子,也是视图切分,添加控件

    CMFCPropertyGridCtrl ,但是还是没能重现你的问题。下面是我的例子的一些关键代码:

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    	// TODO: Add your specialized code here and/or call the base class
    	//创建一个静态分栏窗口,分为一行二列 
    	if (m_splitter.CreateStatic(this, 1, 2) == NULL)
    		return FALSE;
    
    	//将CMFCApplication1View连接到0行0列窗格上
    	m_splitter.CreateView(0, 0, RUNTIME_CLASS(CFormView3), CSize(600, 600), pContext);
    
    	if (m_splitter1.CreateStatic(&m_splitter, 2, 1, WS_CHILD | WS_VISIBLE,m_splitter.IdFromRowCol(0, 1)) == NULL)
    		return FALSE; //将第0行1列再分开2行1列 
    
    	//将FormView1类连接到第二个分栏对象的0行0列
    	m_splitter1.CreateView(0, 0, RUNTIME_CLASS(CFormView1), CSize(200, 400), pContext);
    	//将FormView2类连接到第二个分栏对象的1行0列
    	m_splitter1.CreateView(1, 0, RUNTIME_CLASS(CFormView2), CSize(200, 200), pContext);
    	return TRUE;
    
    	//return CFrameWnd::OnCreateClient(lpcs, pContext);
    }
    

    上面是视图的切分代码,下面是控件的相关代码:

    void CFormView1::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
    	HDITEM item;
    	item.cxy = 120;
    	item.mask = HDI_WIDTH;
    	m1.GetHeaderCtrl().SetItem(0, new HDITEM(item));
    	CMFCPropertyGridProperty * pProp1 = new CMFCPropertyGridProperty(
    		_T("天朝适合生存吗?"),
    		_T("51CTO不谈政治"),
    		_T("这是描述部分"));
    	m1.AddProperty(pProp1);
    //m1是控件变量CMFCPropertyGridCtrl m1;
    
    }
    

    希望对你

    有帮助。














    2014年6月20日 6:28