一、說明
大家都知道在mfc中通過給clistctrl設定lvs_editlabels屬性,並且在程式中響應控制項的lvn_endlabeledit訊息可以修改列表控制項每一行的第一項,也就是主項(item)。**如下:
void ceditlistctrlsampledlg::onendlabeleditlist1(nmhdr* pnmhdr, lresult* presult)int m_iitem; //主項識別符號
int m_isubitem; //子項識別符號
bool m_bfocus; //是否繪製項文字焦點框
bool m_bhighlight; //是否高亮項文字
citemedit m_edtitemedit; //用於子類化editlabel函式返回的cedit*指標
列表控制項中所有項文字的繪製以及特效(焦點框、高亮)都在nm_customdraw訊息處理中實現:
void ceditlistctrl::oncustomdraw(nmhdr* pnmhdr, lresult* presult)else if (pnmlvcustomdraw->nmcd.dwdrawstage == cdds_itemprepaint)
else if (pnmlvcustomdraw->nmcd.dwdrawstage == (cdds_itemprepaint | cdds_subitem))
//設定文字高亮矩形
rctext.left += 4;
rctext.right = rctext.left + size.cx + 6;
if(rctext.right > rcitem.right)
colorref croldtextcolor = pdc->gettextcolor();
//繪製項焦點/高亮效果
if(m_bfocus)
pdc->drawfocusrect(&rctext);
} }
//繪製項文字
rcitem.left += 6;
pdc->drawtext(stritemtext, &rcitem, dt_left | dt_vcenter | dt_singleline | dt_end_ellipsis | dt_noclip);
pdc->settextcolor(croldtextcolor);
*presult = cdrf_skipdefault;// we've painted everything.
} }
void ceditlistctrl::onlbuttondown(uint nflags, cpoint point)關鍵的一步,對項文字進行編輯。在以上**中當執行到editlabel時將會產生乙個編輯框,這時需要將它進行子類化處理,以控制它出現的位置。else
}else
clistctrl::onlbuttondown(nflags, point); }
invalidate(); //強制重繪控制項
}
void ceditlistctrl::onbeginlabeledit(nmhdr* pnmhdr, lresult* presult)通過以上三個步驟大體實現了本文要達到的目的,但是還不能放鬆。接下來還要進行一些顯示細節方面的處理。這包括對wm_paint、wm_setfocus和wm_killfocus訊息的處理,限於篇幅,就不進行細講了,有興趣的朋友可以檢視本文提供的源**。最後實現的效果如下圖所示:*presult = 0;
}void ceditlistctrl::onendlabeledit(nmhdr* pnmhdr, lresult* presult)
verify(m_edtitemedit.unsubclasswindow()!=null);
*presult = 0;
} //編輯文字時對控制項父視窗操作(如單擊其它控制項)引發"onendlabeledit"時重新整理控制項
crect rect;
getwindowrect(&rect);
cpoint point;
::getcursorpos(&point);
if(!rect.ptinrect(point))
}
四、參考資料
2. 可設定單元格顏色的clistctrl類
可編輯子項的CListCtrl類
大家都知道在mfc中通過給clistctrl設定lvs editlabels屬性,並且在程式中響應控制項的lvn endlabeledit訊息可以修改列表控制項每一行的第一項,也就是主項 item void ceditlistctrlsampledlg onendlabeleditlist1 nmh...
可編輯單元格的CListCtrl控制項
clistctrl 控制項生成之後,無論你單擊還是雙擊它的單元格,都沒有任何反應,如果我們需要像excel那樣雙擊乙個單元格後即可編輯該單元格的內容,那怎麼辦呢?乙個 方法就是雙擊單元格之後,在該單元格的地方生成乙個編輯框,然後讓輸入焦點落在該編輯框上,我們即可對該編輯框進行文字編輯,當輸入焦點從編...
可編輯樹extjs
ext.ns htsoft.ux company 巨集天軟體 createtime 2010 01 02 author csx class treepaneleditor extends ext.tree.treepanel description 樹選單編輯器,可帶右鍵操作選單,使用方式示例見ar...