1. 程式人生 > >ComboBox控制元件對子控制元件做關聯時,出現崩潰問題

ComboBox控制元件對子控制元件做關聯時,出現崩潰問題

上一節,我實現了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;

這樣子,就避免了,上述說的崩潰問題。