我从CComboBox继承出一个类, 写一个自绘的CComboBox. 我重写了OnDrawItem() 和 OnPaint(), 但发现在测试程序中创建这个控件时不成功. 主要原因是加入了CBS_OWNERDRAWFIXED风格, 如果不加这个风格创建是可以成功的. 但自绘CComboBox必须要有这个风格, 请有经验的大侠帮忙看一下.这是我创建的代码, 去掉CBS_OWNERDRAWFIXED风格就可以成功创建: m_pMyCombo->Create(
WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL| CBS_SORT|CBS_OWNERDRAWFIXED,
CRect(10,10,200,200), this, 10001);
WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL| CBS_SORT|CBS_OWNERDRAWFIXED,
CRect(10,10,200,200), this, 10001);
ModifyStyle(0, CBS_OWNERDRAWFIXED|CBS_DROPDOWNLIST);
{
// TODO: Add your specialized code here and/or call the base class
ModifyStyle(0, CBS_OWNERDRAWFIXED|CBS_DROPDOWNLIST); CComboBox::PreSubclassWindow();
}
lpMeasureItemStruct->itemWidth = 100;
lpMeasureItemStruct->CtlType = ODT_COMBOBOX;
另外,CtlType不要自己设置。
lpMeasureItemStruct->itemHeight = 16;
lpMeasureItemStruct->itemWidth = 100; 但是没有作用, 因为没有经验, 网上也找不到类似的例子, 能不能帮我贴一份类似的代码让我参考一下呢?///////////////////////////////////////////////////////////////to cnzdgs: 我把CBS_SORT风格去掉了, 但仍没有作用啊.//////////////////////////////////////////////////////////////还有我debug了一下, 发现异常是出在这个断言上:_AFXWIN_INLINE int CComboBox::GetItemHeight(int nIndex) const
{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, CB_GETITEMHEIGHT, nIndex, 0L); }Output出来的信息是这样的:"
First-chance exception at 0x7e4291bf in ComboTest.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x7e4291bf in ComboTest.exe: 0xC0000005: Access violation reading location 0x00000000.
"我不清楚为什么m_hWnd这个指针不对, 能给我点提示吗?