將鍵盤按下的字元輸出到視窗上

2022-08-21 04:24:14 字數 2425 閱讀 2578

要實現字元的輸入,也就是當使用者在鍵盤按下某個字元按鍵後,要把該字元輸出到視窗上,這就需要程式捕獲鍵盤按下訊息(wm_char訊息);將每次輸入的字元都先儲存到乙個單獨的字串中,每當按下新的字元時,都先將字元加到字串中,然後再在視窗當前插入符的位置把這個字串重新輸出一次。

1.首先讓ctextview類捕獲wm_char訊息,生成訊息響應函式

2.接著為ctextview類新增乙個成員變數: cstring m_strline,用來儲存單獨的字串

3.在ctextview類的建構函式中將變數m_strline初始化為空  

ctextview::ctextview()

4.如果用滑鼠單擊視窗中某個位置,那麼插入符就應該移動到該位置,隨後輸入的字元都應該在此位置處向後輸出,需要為ctextview類捕獲滑鼠左鍵按下訊息(wm_lbuttondown訊息),生成相應的訊息響應函式,在該訊息響應函式中利用cwnd類的setcaretpos函式來將插入符移動到滑鼠左擊處

5.當滑鼠單擊視窗中的新位置時,插入符會移動到該位置,那麼之後輸入的字元應該在該位置向後輸出,而之前儲存在字串變數m_strline中的已輸入並在原位置輸出過的字元在m_strline重新重新整理輸出時不應在新位置再次輸出,因此,在插入符移動到滑鼠點選的新位置時,要將m_strline中的已有字串內容清空。可以利用cstring類中的empty函式實現: 

void ctextview::onlbuttondown(uint nflags, cpoint point) 

6.每次滑鼠單擊時,需要捕獲的鍵盤按下訊息應在當前滑鼠點選後插入符移動到的該座標位置,為ctextview類新增成員變數:cpoint m_ptorigin,來儲存該座標位置,以便在訊息響應函式onchar中使用;在ctextview類的建構函式中將該成員變數初始化為0;在滑鼠左鍵按下訊息的響應函式onlbuttondown中儲存當前滑鼠點選的座標位置

7.按下回車鍵後,插入符應換到下一行,這時就需要清空之前儲存在字串m_strline中的內容,並獲取插入符在下一行的新位置,隨後的輸入按鍵捕獲及字串的輸出應從該新位置向後輸出;利用已儲存的當前插入點的縱座標加上當前字型的高度,就可以得到回車後該新位置的縱座標,利用cdc類的gettextmetrics函式即可獲得當前裝置描述表中字型的高度資訊;而換行後的橫座標,均為一行的起始位置0;

8.按下退格鍵(backspace鍵)時,應該刪除位於插入符前面的那個字元,同時插入符的位置應回退乙個字元;解決方法就是,在使用者按下退格鍵的瞬間,將文字的顏色設定為與客戶區背景色相同,將文字輸出一次,然後從儲存了輸入字元的字串變數m_strlen中將要刪除的字元刪除,再把文字的顏色設定回原來的顏色,再將字串文字輸出;

獲取背景色:cdc類的getbkcolor函式

設定文字顏色:cdc類的settextcolor函式

實現從字串中刪除乙個字元:先利用cstring類的getlength函式獲得指定字串中的字元個數n;再利用cstring類中的left函式指定只顯示原字串中從左向右的字元個數n-1 

void ctextview::onchar(uint nchar, uint nrepcnt, uint nflags) 

else if(0x08==nchar)else

csize sz=dc.gettextextent(m_strline);  //得到客戶區顯示的字串的寬度和高度

cpoint pt;

pt.x=m_ptorigin.x+sz.cx;  //將插入符的橫座標移動到已輸出字串的後面

pt.y=m_ptorigin.y;  //插入符的縱座標不變

setcaretpos(pt);  //設定插入符的座標位置

dc.textout(m_ptorigin.x,m_ptorigin.y,m_strline);  //重新整理輸出修改後的字串

cview::onchar(nchar, nrepcnt, nflags);

}

鍵盤事件(按下CTRL M 最大化視窗)

qkeyevent類用來描述乙個鍵盤事件。當鍵盤按鍵被按下或者被釋放的時,鍵盤事件便會被傳送給擁有鍵盤輸入焦點的部件。qkeyevent的key 函式可以獲取具體的按鍵。回車鍵在qt key return 鍵盤上的一些修飾鍵,比如ctrl和shift等,這裡需要使用qkeyevent的modifie...

將控制項的內容輸出到Excel

主要用到 control.rendercontrol 方法,該方法有兩個過載版本 control.rendercontrol htmltextwriter 將伺服器控制項的內容輸出到所提供的 htmltextwriter 物件中 如果已啟用跟蹤功能,則儲存有關控制項的跟蹤資訊。control.ren...

將控制項的內容輸出到Excel

主要用到 control.rendercontrol 方法,該方法有兩個過載版本 control.rendercontrol htmltextwriter 將伺服器控制項的內容輸出到所提供的 htmltextwriter 物件中 如果已啟用跟蹤功能,則儲存有關控制項的跟蹤資訊。control.ren...