青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

飯中淹的避難所~~~~~

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  94 隨筆 :: 0 文章 :: 257 評論 :: 0 Trackbacks
 1 void InputBox::_SetCaretPos( int iPos )
 2 {
 3     //    將光標位置保持在0到文本的總長度間
 4     int iNewPos = iPos < 0 ? 0 : (iPos > m_strText.length() ? m_strText.length() : iPos);
 5 
 6     //    如果光標位置較上一次有所改變
 7     if( iNewPos != m_iCaretCharPos )
 8     {
 9         //    如果新的位置小於上一次光標位置
10         if( iNewPos < m_iCaretCharPos )
11         {
12             //    最開始左邊界是邊界寬度
13             int iLeftBorder = BORDER_WIDTH;
14             //    將光標相對於首字符的顯示位置根據兩個位置間的字符的寬度加以調整
15             forint i = iNewPos;i < m_iCaretCharPos; ++i )
16             {
17                 m_iCaretFirstCharDistance -= m_pFont->GetCharWidth( m_strText.c_str()[i] ) + CHAR_SPACE;
18             }
19             //    如果前面仍有字符,就調整邊界位置
20             if( iNewPos > 0 )
21             {
22                 //    調整邊界位置
23                 iLeftBorder += m_pFont->GetCharWidth( m_strText.c_str()[iNewPos-1] ) + CHAR_SPACE;
24             }
25             //    光標渲染位置超出左邊界,將光標移動到邊界上
26             if( m_iCaretFirstCharDistance + m_iFirstCharRenderPosition < iLeftBorder )
27             {
28                 m_iFirstCharRenderPosition = iLeftBorder - m_iCaretFirstCharDistance;
29             }
30         }
31         else
32         {
33             //    計算右邊界,寬度減去邊界寬度,還有為光標位置留出的像素
34             int iRightBorder = m_iWidth - BORDER_WIDTH - CARET_WIDTH;
35             forint i = m_iCaretCharPos; i < iNewPos; ++i )
36             {
37                 m_iCaretFirstCharDistance += m_pFont->GetCharWidth( m_strText.c_str()[i] ) + CHAR_SPACE;
38             }
39             //    如果後面還有一個字符
40             if( iNewPos < m_strText.length() )
41             {
42                 iRightBorder -= m_pFont->GetCharWidth( m_strText.c_str()[iNewPos] );
43             }
44             //    光標超出右邊界
45             if( m_iCaretFirstCharDistance + m_iFirstCharRenderPosition > iRightBorder )
46             {
47                 m_iFirstCharRenderPosition = iRightBorder - m_iCaretFirstCharDistance;
48             }
49         }
50 
51         m_iCaretCharPos = iNewPos;
52     }
53 }
54 

m_iCaretFirstCharDistance 表示光標位置和第一個字符位置之間的距離
m_iFirstCharRenderPosition 表示第一個字符的渲染位置
m_iCaretCharPos 表示光標在字符串的字符索引位置
BORDER_WIDTH 表示編輯框向內的邊界寬度
CARET_WIDTH 表示光標的寬度
CHAR_SPACE 表示編輯框中字符間距

 1 void InputBox::Render()
 2 {
 3     hge->Gfx_SetClipping( m_iX, m_iY, m_iWidth, m_iHeight );
 4     _RenderBox(0xffffff00);
 5     m_pFont->Render( m_strText.c_str(), m_strText.length(), m_iX + BORDER_WIDTH + m_iFirstCharRenderPosition, m_iY, 0xff000000 );
 6     if( m_bShowCaret )
 7     {
 8         forint i = 0;i < m_iCaretWidth; ++i )
 9         {
10             hge->Gfx_RenderLine( 
11                 m_iX + BORDER_WIDTH + m_iFirstCharRenderPosition + m_iCaretFirstCharDistance + i, 
12                 m_iY, 
13                 m_iX + m_iFirstCharRenderPosition + BORDER_WIDTH + m_iCaretFirstCharDistance + i, 
14                 m_iY + m_iHeight, 
15                 0xff000000 );
16         }
17     }
18     hge->Gfx_SetClipping();
19 }

m_iX 表示文本框的位置X
m_iY 表示文本框的位置Y
m_iWidth 表示文本框的寬度
m_iHeight 表示文本框的高度
hge->Gfx_RenderLine 是畫線的
_RenderBox 是畫外框的。
hge->Gfx_SetClipping 是設置裁剪的
m_pFont->Render 是渲染字符串




針對_SetCaretPos的邏輯算法,需要注意的一點是,如果要刪除光標位置和首字符間的字符,就一定要對光標位置進行重定位。
退格鍵邏輯裏面,應該先設置光標位置向前一格,再執行刪除邏輯刪除光標當前位置上的字符。
刪除邏輯只要刪除光標位置上的字符就可以了,光標相對於首字符的位置不會改變。

綜上,光標位置的主要邏輯思想是
1- 改變光標位置
2- 計算新的光標位置到首字符的距離
3- 根據新的距離產生一個新的光標顯示位置
4- 根據光標顯示位置是否超出邊界和超出的多少,調整首字符顯示位置。

posted on 2010-03-24 02:24 飯中淹 閱讀(2305) 評論(0)  編輯 收藏 引用 所屬分類: 游戲客戶端數據算法分析
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区三区视频在线观看| 欧美日韩国产一中文字不卡 | 亚洲精品视频免费观看| 在线观看亚洲精品| 在线精品亚洲| 欧美日韩国产色视频| 欧美在线网站| 久久精品首页| 欧美xart系列高清| 亚洲人成啪啪网站| 亚洲精品欧美| 亚洲欧美一区二区三区在线| 久久久五月婷婷| 欧美日韩在线三区| 国产在线乱码一区二区三区| 亚洲精品欧美日韩专区| 午夜日韩福利| 亚洲高清视频中文字幕| 亚洲视频网站在线观看| 久久久国产精品一区二区中文| 欧美成人一区二免费视频软件| 国产精品高清在线| 亚洲激情成人网| 欧美综合国产| 亚洲国产精品一区二区www在线| 这里只有视频精品| 美女露胸一区二区三区| 国产精品一区在线观看你懂的| 亚洲第一福利视频| 亚洲欧美日韩在线观看a三区| 欧美激情一区二区在线 | 亚洲一区在线观看免费观看电影高清 | 欧美一区二区三区视频免费| 免费试看一区| 国产一区二区高清| 中文国产亚洲喷潮| 欧美国产精品中文字幕| 欧美在线啊v| 国产精品激情| 一区二区三区三区在线| 欧美激情1区2区3区| 久久riav二区三区| 国产毛片精品国产一区二区三区| 一区二区免费看| 亚洲国产欧美一区二区三区久久| 久久久999国产| 国产丝袜美腿一区二区三区| 亚洲一区视频在线观看视频| 亚洲国内自拍| 欧美电影免费观看大全| 亚洲国产婷婷综合在线精品 | 国产综合一区二区| 欧美一区二区日韩一区二区| 在线视频你懂得一区二区三区| 欧美精品一区二区三区蜜臀| 亚洲精品在线电影| 亚洲国产一区二区精品专区| 美女性感视频久久久| 欧美一区国产在线| 亚洲午夜久久久久久久久电影网| 欧美精品一区二| 日韩一二三在线视频播| 亚洲开发第一视频在线播放| 欧美精品一区在线发布| 一区二区激情| 亚洲视频网在线直播| 国产精品网站在线播放| 欧美在线资源| 久久婷婷综合激情| 亚洲精品国久久99热| 亚洲精品欧美| 国产乱码精品1区2区3区| 久久美女性网| 美乳少妇欧美精品| 中文无字幕一区二区三区| 亚洲一区国产精品| 精品999在线播放| 欧美国产精品va在线观看| 欧美日韩国产成人在线观看| 午夜精品美女自拍福到在线| 久久精品国产91精品亚洲| 亚洲黄色一区| 亚洲校园激情| 亚洲高清自拍| 在线中文字幕不卡| 伊人成人开心激情综合网| 最新精品在线| 国产日韩一区二区三区在线| 欧美激情aⅴ一区二区三区| 欧美视频在线播放| 久久躁日日躁aaaaxxxx| 欧美日韩国产页| 久久久.com| 欧美日韩另类字幕中文| 久久夜色精品一区| 欧美视频中文字幕在线| 久久在线免费观看| 国产精品超碰97尤物18| 欧美aa国产视频| 国产精品啊啊啊| 亚洲国产精品精华液网站| 国产精品你懂的在线欣赏| 亚洲大黄网站| 国产亚洲女人久久久久毛片| 日韩午夜视频在线观看| 在线观看日韩av先锋影音电影院| 在线视频你懂得一区二区三区| 在线日韩视频| 小处雏高清一区二区三区| 一本色道久久加勒比88综合| 久久免费精品视频| 久久精品视频网| 国产精品美女久久久| 欧美黑人在线观看| 一区免费视频| 欧美一区二视频| 亚洲欧美精品在线| 欧美片第一页| 亚洲国产精品久久久| 在线精品一区| 久久成人人人人精品欧| 亚洲男人的天堂在线| 亚洲日韩欧美视频一区| 欧美在线免费观看视频| 亚洲一区久久| 国产精品99久久久久久久久久久久| 久久九九久久九九| 久久精品国产亚洲精品| 国产伦精品一区二区三区在线观看| aa亚洲婷婷| 亚洲一区二区视频在线| 欧美精选午夜久久久乱码6080| 欧美777四色影视在线| 在线日本成人| 欧美99久久| 亚洲日本aⅴ片在线观看香蕉| 亚洲黄色免费电影| 欧美精品三级在线观看| 亚洲精品国产视频| 一本色道88久久加勒比精品| 欧美三级小说| 亚洲免费影视第一页| 欧美一级淫片播放口| 国产精品一区二区久久精品| 午夜精品久久久久久久久| 久久精品在线观看| 在线看片欧美| 欧美黑人国产人伦爽爽爽| 亚洲美女少妇无套啪啪呻吟| 亚洲性视频网站| 国产欧美日韩高清| 久久婷婷麻豆| 亚洲蜜桃精久久久久久久| 香蕉av777xxx色综合一区| 国产一区二区三区自拍| 免费在线视频一区| 正在播放亚洲一区| 久久久噜噜噜久噜久久| 亚洲激情一区二区三区| 欧美日韩免费一区| 欧美一级在线视频| 欧美bbbxxxxx| 亚洲一区二区毛片| 狠狠色狠狠色综合系列| 欧美金8天国| 先锋影音国产一区| 亚洲国产小视频| 校园激情久久| 亚洲人体一区| 国产欧美日本| 欧美成人免费在线| 亚洲欧美日韩在线| 亚洲高清中文字幕| 欧美一级理论片| 亚洲精品偷拍| 国产一区二区三区网站 | 亚洲欧美福利一区二区| 久久亚洲精品中文字幕冲田杏梨| 亚洲免费电影在线观看| 国产人成一区二区三区影院| 欧美国产精品日韩| 欧美一区二区三区四区在线观看| 亚洲激情视频| 奶水喷射视频一区| 欧美亚洲免费电影| 99re66热这里只有精品3直播| 国产亚洲精品7777| 欧美午夜精品久久久| 久久天天综合| 午夜久久电影网| 在线一区视频| 亚洲精品久久嫩草网站秘色| 亚洲成人资源网| 久久精品国产亚洲一区二区| 一本色道久久综合亚洲精品小说| 欧美成人一区二免费视频软件| 久久国产88| 亚洲欧美另类国产| 亚洲网站视频| 一本色道久久综合亚洲精品小说 |