該類繼承自mfc的clistctrl類;
實現列可選,多單元格可選,單擊選中單元格並能雙擊編輯,同時也可以設定某一列是否能進行編輯等等。
功能強大,歡迎使用。
標頭檔案:
ceditlistctrl.h
class ceditlistctrl : public clistctrl
}afx_virtual
// implementation
public:
virtual ~ceditlistctrl();
// generated message map functions
protected:
//}afx_msg
declare_message_map()
private:
void invalidate_grid(int row,int col);
afx_msg void custom_draw_funtion(nmhdr *pnmhdr, lresult *presult);
};
原始檔:
ceditlistctrl.cpp
// editlistctrl.cpp : implementation file
//#include "stdafx.h"
//#include "ceditlistdlg.h"
#include "editlistctrl.h"
#ifdef _debug
#define new debug_new
#undef this_file
static char this_file = __file__;
#endif
// ceditlistctrl
ceditlistctrl::ceditlistctrl()
ceditlistctrl::~ceditlistctrl()
begin_message_map(ceditlistctrl, clistctrl)
//}afx_msg_map
on_notify_reflect(nm_customdraw,custom_draw_funtion)
end_message_map()
/// ceditlistctrl message handlers
void ceditlistctrl::custom_draw_funtion(nmhdr *pnmhdr, lresult *presult)
if (m_old_subitem>m_now_subitem)
if( (row>=olditem&&row<=nowitem)&&(col>=oldsub&&col<=nowsub))
else
cbrush brush(kolor);
pdc->fillrect(&rect,&brush);
}else
else
} rect.offsetrect(5,0);
if (col==3)
else
pdc->drawtext(str,&rect,ucode);
*presult=cdrf_skipdefault;
break;
} }}void ceditlistctrl::onclick(nmhdr* pnmhdr, lresult* presult)
} *presult = 0;
}void ceditlistctrl::onkeydown(nmhdr* pnmhdr, lresult* presult)
*presult = 0;
}void ceditlistctrl::invalidate_grid(int row, int col)
void ceditlistctrl::onmousemove(uint nflags, cpoint point)
clistctrl::onmousemove(nflags, point);
}void ceditlistctrl::onlbuttonup(uint nflags, cpoint point)
void ceditlistctrl::onlbuttondown(uint nflags, cpoint point)
//m_edit->showwindow(sw_hide);
clistctrl::onlbuttondown(nflags, point);
}void ceditlistctrl::onsetfocus(nmhdr* pnmhdr, lresult* presult)
*presult = 0;
}void ceditlistctrl::onkillfocus(nmhdr* pnmhdr, lresult* presult)
void ceditlistctrl::onhscroll(uint nsbcode, uint npos, cscrollbar* pscrollbar)
void ceditlistctrl::onvscroll(uint nsbcode, uint npos, cscrollbar* pscrollbar)
else
}}void ceditlistctrl::seteditcolomn(int col, bool edit)
} if(!m_isedit[m_subitem])//若當前列不允許直接編輯,則返回
return;
rect m_itemrect,m_r;
getitemrect(m_item ,&m_itemrect,2);
getitemrect(0 ,&m_r,2);
int m_height=m_itemrect.bottom -m_itemrect.top ;
int x=m_r.left ,y=m_r.top,cx,cy;//(x,y,cx,cy)為編輯框顯示的位置
for(i=0;i< m_item;i++)
y+=m_height;
cy=y+m_height;
for(i=0;imovewindow(x-4,y,cx-x-4,cy-y);//移動到當前子專案的位置。
invalidate();//重新整理螢幕。
return;
} //若編輯框不存在,則建立編輯框,並在當前子專案處顯示編輯框。
crect rect(x-4,y,cx-4,cy);
m_edit=new cedit();
m_edit->create (ws_child|ws_visible|ws_border,rect,this,id_listedit);
setwindowlong(m_edit->m_hwnd, gwl_style,getwindowlong(m_edit->m_hwnd, gwl_style) | es_number);//控制只允許輸入數字
cstring str=getitemtext (pnmlistview->iitem,pnmlistview->isubitem);
m_edit->updatedata(0);
m_edit->setwindowtext(str);
dword dwsel = m_edit->getsel();
m_edit->setsel(hiword(dwsel), -1);
m_edit->showwindow (sw_show);//顯示編輯框。
m_edit->setfocus ();
*presult = 0;
}bool ceditlistctrl::destroywindow()
void ceditlistctrl::onclose()
關於listctrl的用法
插入列 行和列都是從0開始 m list.insertcolumn 0,執行時間 lvcfmt left 80 1 m list.insertcolumn 1,描述 lvcfmt left 80 1 m list.insertcolumn 2,程式路徑 lvcfmt left 150 1 m lis...
報表風格的listctrl
報表風格的listctrl 說明 m list是clistctrl型別變數 long lstyle lstyle getwindowlong m list.m hwnd,gwl style 獲取當前視窗的風格 lstyle lvs typemask 清除顯示方式位 lstyle lstyle lvs...
ListCtrl控制項的使用
list contrl控制項的使用 1.建立基於對話方塊的應用程式,布置介面,設定屬性。注意新增的是listctrl控制項,不是listbox控制項,在控制項工具箱的倒數第五行list control控制項。屬性中設定styles標籤中的檢視屬性為report,是乙個多列列表顯示。2.設定控制項變數...