ComboBox控制元件對子控制元件做關聯時,出現崩潰問題
阿新 • • 發佈:2018-11-08
上一節,我實現了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;
這樣子,就避免了,上述說的崩潰問題。