1.ModifyStyle(0,LVS_OWNERDRAWFIXED);如果我定义了这个类型之后是不是下面这个消息就响应不了?
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
如果没有定义重绘的类型是不是DrawItem响应不了2.我想重载一个自己的CListCtrl类,里面有按扭、进度条、图片、文字……之类一些控件,
请问要怎么做会比较好,
如果有做过这个前辈们,请不吝赐教
我的QQ:366789252
E_Mail:[email protected]
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
如果没有定义重绘的类型是不是DrawItem响应不了2.我想重载一个自己的CListCtrl类,里面有按扭、进度条、图片、文字……之类一些控件,
请问要怎么做会比较好,
如果有做过这个前辈们,请不吝赐教
我的QQ:366789252
E_Mail:[email protected]
2.我想重载一个自己的CListCtrl类,里面有按扭、进度条、图片、文字……之类一些控件, 请问要怎么做会比较好a, 首先自绘制CLISTCTRL
b, 根据你的需要, 动态创建其他的控件
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) 这个消息是不是就不能用了?
2.能不能留个联系方式,碰到问题可以请教一下!谢谢!!!
是需要的,比如想CListCtrl的Report风格下希望对于每一个子项都可以编辑
一般谁也不会有这么全的功能不是,
至于对于编辑每一个子项,以及在子项中添加CCombobox控件的还是有的http://www.vckbase.com/document/viewdoc/?id=1853
http://www.codeproject.com/KB/list/#ListView controls这两个上面都找的到,就不发给你了,都是开源的。看下吧
可以用吗?我在我工程里面加入定义了自己定义的消息可是通过断点调试,这个消息就没有响这个消息了,只能响应DrawItem 这个消息了!!
ON_WM_MEASUREITEM()
ON_WM_CREATE()
ON_WM_MEASUREITEM_REFLECT()
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
//NM_CUSTOMDRAW
END_MESSAGE_MAP()
void CWListCtrl::PreSubclassWindow()
{
}
int CWListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
//ModifyStyle(0,LVS_OWNERDRAWFIXED);
CListCtrl::PreSubclassWindow();
CHeaderCtrl *pHeader = GetHeaderCtrl();
m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}
void CWListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMTVCUSTOMDRAW pCustomDraw = (LPNMTVCUSTOMDRAW)pNMHDR; static int nItemState;
static CRect rcItem;
switch (pCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
//奇数行
if(pCustomDraw->nmcd.dwItemSpec % 2)
pCustomDraw->clrTextBk = RGB(239, 244, 248);
//偶数行
else
pCustomDraw->clrTextBk = RGB(244, 248,251);
*pResult = CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTPAINT;
break;
case CDDS_ITEMPOSTPAINT:
break;
default:
*pResult = CDRF_DODEFAULT;
}
}void CWListCtrl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CWListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
if (m_nRowHeight>0)
{
lpMeasureItemStruct->itemHeight = m_nRowHeight;
}
}
int CWListCtrl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat /* = LVCFMT_LEFT */, int nWidth /* = -1 */, int nSubItem /* = -1 */)
{
m_Header.m_HChar.Add(lpszColumnHeading);
return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);
}
void CWListCtrl::DeleteAllColumn()
{
int ch =m_Header.GetItemCount();
for(int d= 0;d<ch;d++)
DeleteColumn(0);
m_Header.m_HChar.RemoveAll();
}
// Gradient - 渐变系数,立体背景用,不用渐变设为0
void CWListCtrl::SetHeaderBKColor(int R, int G, int B, int Gradient) //设置表头背景色
{
m_Header.m_R = R;
m_Header.m_G = G;
m_Header.m_B = B;
m_Header.m_Gradient = Gradient;
}// 设置表头高度
void CWListCtrl::SetHeaderHeight(float Height) //设置表头高度
{
m_Header.m_Height = Height;
}
bool CWListCtrl::FindColColor(int col,COLORREF &color) //查找列颜色
{
int flag = 0;
for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
{
stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
if (pColor->nCol==col)
{
flag = 1;
color = pColor->rgb;
break;
}
}
if (1==flag)
{
return true;
}
return false;
}
bool CWListCtrl::FindItemColor(int col,int row,COLORREF &color) //查找颜色
{
int flag = 0;
for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
{
stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
if (pColor->nCol==col&&pColor->nRow==row)
{
flag = 1;
color = pColor->rgb;
break;
}
}
if (1==flag)
{
return true;
}
return false;
}
void CWListCtrl::SetColColor(int col,COLORREF color) //设置列颜色
{
stColor *pColor = new stColor;
pColor->nCol = col;
pColor->rgb = color;
m_ptrListCol.AddTail(pColor);
}
void CWListCtrl::SetItemColor(int col,int row,COLORREF color) //设置格子颜色
{
stColor *pColor = new stColor;
pColor->nCol = col;
pColor->nRow = row;
pColor->rgb = color;
m_ptrListItem.AddTail(pColor);
}
void CWListCtrl::SetRowHeigt(int nHeight) //高置行高
{
m_nRowHeight = nHeight; CRect rcWin;
GetWindowRect(&rcWin);
WINDOWPOS wp;
wp.hwnd = m_hWnd;
wp.cx = rcWin.Width();
wp.cy = rcWin.Height();
wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);
}
void CWListCtrl::SetHeaderFontHW(int nHeight,int nWith) //设置头部字体宽和高
{
m_Header.m_fontHeight = nHeight;
m_Header.m_fontWith = nWith;
}
void CWListCtrl::SetHeaderTextColor(COLORREF color) //设置头部字体颜色
{
m_Header.m_color = color;
}
BOOL CWListCtrl::SetTextColor(COLORREF cr) //设置字体颜色
{
m_color = cr;
return TRUE;
}
void CWListCtrl::SetFontHW(int nHeight,int nWith) //设置字体高和宽
{
m_fontHeight = nHeight;
m_fontWith = nWith;
}
void CWListCtrl::SetColTextColor(int col,COLORREF color)
{
stColor *pColor = new stColor;
pColor->nCol = col;
pColor->rgb = color;
m_colTextColor.AddTail(pColor);
}
bool CWListCtrl::FindColTextColor(int col,COLORREF &color)
{
int flag = 0;
for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
{
stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
if (pColor->nCol==col)
{
flag = 1;
color = pColor->rgb;
break;
}
}
if (1==flag)
{
return true;
}
return false;
}
bool CWListCtrl::FindItemTextColor(int col,int row,COLORREF &color)
{
int flag = 0;
for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
{
stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
if (pColor->nCol==col&&pColor->nRow==row)
{
flag = 1;
color = pColor->rgb;
break;
}
}
if (1==flag)
{
return true;
}
return false;
}
void CWListCtrl::SetItemTextColor(int col,int row,COLORREF color)
{
stColor *pColor = new stColor;
pColor->nCol = col;
pColor->nRow = row;
pColor->rgb = color;
m_ItemTextColor.AddTail(pColor);
}
恩。这样就对了。没有加这个他就会响应那个消息,如果加了就不行了。那按你的方法的能不能做到说把ListCtrl的每一行的高度加高,(不用图片撑高的方法)