IDC_LIST1m_List,類型 CListBox
CCheckListBox m_List;
LISTBOX IDC_LIST1, 160, 133, 153, 84,
LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT |
NOT WS_BORDER | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE
必須包含 LBS_OWNERDRAWFIXED 或 LBS_OWNERDRAWVARIABLE,否則執行時 ASSERT 失敗崩潰!CCheckListBox 繼承自 CListBox,核心繪製邏輯在 DrawItem 中自繪核取方塊與文字。MFC 要求 Owner-Draw 模式下由應用程式負責繪製,因此資源定義必須宣告 Owner-Draw 樣式。
| 現象 | 原因 | 解法 |
|---|---|---|
執行即崩潰,Call Stack 指向 ASSERT 檢查樣式 | 未設定 LBS_OWNERDRAWFIXED/VARIABLE | 修改 .rc 檔手動加入樣式 |
類別向導無法直接建立 CCheckListBox 變數 | MFC 不支援資源編輯器拖放 CCheckListBox | 先建 CListBox 變數,再手動改型別 |
無 SetStyle 方法可動態設定 | CListBox 未提供 SetStyle | 只能在 .rc 或 PreSubclassWindow 中 ModifyStyle |