可編輯單元格的CListCtrl控制項

2021-06-14 03:37:13 字數 1999 閱讀 2502

clistctrl 控制項生成之後,無論你單擊還是雙擊它的單元格,都沒有任何反應,如果我們需要像excel那樣雙擊乙個單元格後即可編輯該單元格的內容,那怎麼辦呢?乙個 方法就是雙擊單元格之後,在該單元格的地方生成乙個編輯框,然後讓輸入焦點落在該編輯框上,我們即可對該編輯框進行文字編輯,當輸入焦點從編輯框上消失時 (通常是使用者在編輯框外的地方單擊,就像excel當編輯完乙個單元格的內容後使用者在單元格外的地方單擊一下以示確認輸入完畢一樣。),就理解為編輯完 畢,然後把編輯框的內容設定為該單元格的內容,最後隱藏或銷毀編輯框。

1. 從clistctrl類繼承,新建乙個自己的列表框類,在這裡我取名為cpage2listctrl,下面就要在cpage2listctrl 類實現雙 擊單元格編輯功能。上面也已經說道,雙擊單元格後要顯示乙個編輯框,我們把那個編輯框看做是cpage2listctrl 類的成員。接下來就要為這個編 輯框新建乙個從cedit繼承的類,為什麼不直接用cedit類呢,以後就知道為什麼的了。這個從cedit繼承的編輯框類我取名為clistedit。

2.為cpage2listctrl類新增成員變數和函式:

public:

void disposeedit(); 

//這個函式的作用是.....往下看就知道的了。

clistedit m_edit; 

//這個就是雙擊單元格後顯示的編輯框。

int row,col; 

//用來記錄雙擊的單元格是第幾行第幾列。

3.重寫cpage2listctrl類的presubclasswindow()虛函式,這個函式的作用是什麼,這裡就不說了,我們要在這個函式裡設定cpage2listctrl類的基本樣式和擴充套件樣式,還有建立m_edit成員變數的編輯框。

void cpage2listctrl::presubclasswindow() 

4.對cpage2listctrl類新增訊息處理,對雙擊事件進行響應,訊息名稱是wm_lbuttondblclk。

void cpage2listctrl::onlbuttondblclk(uint nflags, cpoint point) 

if(ncount == row)//只可編輯空白處第一行

return;

if(0)//條件自己新增

crect rect;

getsubitemrect(row,col,lvir_label,rect); 

//得到該單元格矩形的位置大小資訊。

cstring str;

str = getitemtext(row,col); 

//獲取該單元格已存在的文字內容。

m_edit.movewindow(rect); 

//把編輯框移動到該單元格矩形上。

m_edit.setwindowtext(str); 

//把單元格原本的內容顯示到編輯框上。

m_edit.showwindow(sw_show); 

//顯示編輯框。

m_edit.setsel(0,-1); 

//全選編輯框的內容。

m_edit.setfocus(); 

//設定輸入焦點在編輯框上。

updatewindow();}}

5.當編輯框輸入焦點消失時,就認為編輯完畢,然後把編輯框的內容設定到單元格上。編輯框輸入焦點消失時會產生wm_killfocus訊息,我們對該訊息進行響應,這就是為什麼上面要為編輯框新建乙個類的原因了。

void clistedit::onkillfocus(cwnd* pnewwnd) 

void cpage2listctrl::disposeedit()

if(ncount == row)//只可編輯空白處第一行

return;

if(0)//條件自己新增

this->setitemtext(row,col,slabel);

m_edit.showwindow(sw_hide);

if(getitemcount() == row+1) 

insertitem(row+1,0);

return ;}

可編輯單元格ALV

在使用alv顯示列表的過程中,我們可以使用it fieldcat引數設定某乙個欄位的可編輯狀態。但是,要設定具體的單元格的可編輯狀態對於對alv不是很了解的人來說是乙個頭大的問題。具體單元格可編輯狀態設定的主要思想 首先通過eidt引數設定列為可編輯狀態 其次對輸出內錶進行迴圈將不需要編輯的行設定為...

FM控制ALV單元格可編輯

ecc6 測試ok!report zalv edit.type pools slis.fieldcatalog data it fieldcat type lvc t fcat.data x fieldcat type lvc s fcat.data x layout type lvc s layo...

設定ALV單元格可編輯狀態

在使用alv顯示列表的過程中,我們可以使用it fieldcat引數設定某乙個欄位的可編輯狀態。但是,要設定具體的單元格的可編輯狀態對於對alv不是很了解的人來說是乙個頭大的問題。具體單元格可編輯狀態設定的主要思想 首先通過eidt引數設定列為可編輯狀態 其次對輸出內錶進行迴圈將不需要編輯的行設定為...