ComboBox控件对子控件做关联时,出现崩溃问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32716885/article/details/83273073

上一节,我实现了Combobox控件中子控件(edit)可以让光标垂直的效果。

后来,发现了一个问题。

我使用的开发工具是vs2010.

当从工具箱中拖出来的控件时,使用上一章节我推荐的方案,没有问题的。

但是,当自己create出来一个控件时,此时就会在下图位置出现崩溃。

如图所示:

因为,当我Create该控件时,会先走到PreSubclassWindow()消息中,此时,该控件还没有被创建出来,无法关联控件。我不知道我说的是不是正确。唯一确定的是,走到如图所示代码中,肯定会崩溃,这是必然的。

因此,我的解决方案是:

当我在create该控件时,用一个bool类型的值进行判断。bCreateCtrl = True

当使用了create函数创建控件时,在PreSubClassWindow时不处理子控件关联,在create之后再处理

	m_bCreateCtrl = TRUE;
	if (CComboBox::Create(dwStyle,rect,pParentWnd,nID))
	{
		this->SetFont(pParentWnd->GetFont());
		

        COMBOBOXINFO   comboInfo;

		//获取控件信息
		comboInfo.cbSize = sizeof(COMBOBOXINFO);
		GetComboBoxInfo(&comboInfo);
		//子类化编辑框
		if (comboInfo.hwndItem != nullptr )
		{
			if ( ! ( (GetStyle() & CBS_DROPDOWNLIST) == CBS_DROPDOWNLIST ))
				m_editCtrl.SubclassWindow(comboInfo.hwndItem);

		}
		return this;
	}
	else
		return NULL;

这样子,就避免了,上述说的崩溃问题。

猜你喜欢

转载自blog.csdn.net/qq_32716885/article/details/83273073