CListViewCtrl对应MFC中的是CListCtrl,
{
lpMeasureItemStruct->itemHeight = 26;
}
void ForceMeasureItemMessage()
{
// I just want to nudge it up a little.
CRect window_rect;
GetWindowRect(&window_rect);
CPoint pt = window_rect.TopLeft();
::ScreenToClient(GetParent(), &pt);
window_rect.right = pt.x + window_rect.Width();
window_rect.left = pt.x;
window_rect.bottom = pt.y + window_rect.Height();
window_rect.top = pt.y + 1;
MoveWindow(window_rect);
// Alright now move it back.
window_rect.top = pt.y;
MoveWindow(window_rect);
}
这个函数你必须在父窗口的的OnInitDialog函数中调用才能有效.
还有一个棘手的问题就是在你使用带有header的ClistViewCtrl的时候,还要绘制header,我现在不知道是我自己没弄好还是怎么会事,我自己重载的CHeaderCtrl控件类就是收不到WM_DRAWITEM消息,不过能收到WM_PAINT消息我就在OnPaint函数中把它给我画了出来,反正我也不要这个Header做什么事情,只是一个显示就够了,
还有就是这个Header的高度,我试了好多中方法都没有用,除了改变它的点阵字体的大小了.不过这个字体并不是我们将来显示的字体的大小,整个header都是绘制的,当然显示的字也是你绘制的,在绘制字的时候你可以再次设置dc显示的字体.
哦,对了还有,就是刚知道一个绘制渐变的简单方法,是有api的函数可以使用的
来看一下,可能对你有帮助的哦
TRIVERTEX tv[] = {
{ rect.left, rect.top,0,0x4600,0xC300},
{ rect.right, rect.bottom, 0x0700,0xb200,0xf800}
};
GRADIENT_RECT gr = { 0, 1 };
dc.GradientFill ( tv, 2, &gr, 1, GRADIENT_FILL_RECT_V );
好了来看我绘制的ClistViewCtrl吧