亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? textbox.cpp

?? SimpleGraphicOperatingSystem 32位圖形化操作系統(tǒng) 多進程 支持FAT32 詳見www.sgos.net.cn
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <osdef.h>//WM_**
#include <System.h>
#include <Api.h>	//Sgos api

namespace System{
	class MyVScroll: public VScrollBar{
    private:
        TextBox* parent;
    public:
        MyVScroll::MyVScroll( TextBox* p, int style ):
            VScrollBar( p, style ){
            parent = p;
        }
        virtual int MyVScroll::OnChange( int v ){
            parent->SetVisualPosition( -1, v );
            VScrollBar::OnChange(v);
        }
    };

	int TextBox::SetVisualPosition( int x, int y ){
		if(x<0)x=0;
		if(y<0)y=0;
		if(!(style&TEXTBOX_NOVSCROLLBAR))
			if(y>vScroll->VScrollBar::Max())y=vScroll->VScrollBar::Max();
		vX = x;
		vY = y;
		ReloadChars();
		SetSelLength(selLength);
		DrawChars();
		if(!(style&TEXTBOX_NOVSCROLLBAR))
			vScroll->SetValue( vY );
		return true;
	}

	int TextBox::OnSize( int w, int h ){
		Width = w;
		Height = h;
		left = midSpace;
		top = midSpace;
		if( style&TEXTBOX_NOVSCROLLBAR )
			right = w-midSpace;
		else
			right = w-vScroll->BaseWindow::Width();
		bottom = h-midSpace;
		if( bottom<=top||right<=left )
		{
			delete this;
			return 0;
		}
		rowChars = (right-left)/cw;
		colChars = (bottom-top)/ch;
		if(rowChars<1)rowChars=1;
		if(colChars<1)colChars=1;
		if( style&TEXTBOX_NOAUTONEXTLINE )	//沒有自動換行
		{
			maxCharPerLine = 8192;
		}else{
			maxCharPerLine = rowChars;
		}
		delete[] chars;
		chars = new _Char[rowChars*colChars];
		if(!(style&TEXTBOX_NOVSCROLLBAR)){
			vScroll->Move( Width-vScroll->BaseWindow::Width(), 0, vScroll->BaseWindow::Width(), Height );
			SetScrollBar();
		}
		ReloadChars();
		DrawChars();

		BaseWindow::OnSize(w,h);
	}

	TextBox::~TextBox(){
		if(vScroll)
			delete vScroll;
	}

	TextBox::TextBox( BaseWindow* parent, string text, int style ):
		BaseWindow( parent, text, style )
	{
	    //文本框樣式
		winStyle.active.backColor=Bitmap::MakeColor(99,99,99);	//激活時窗體背景顏色
		//獲取字符長寬占多少象素
		Bitmap::CalculateTextSize( "a", 1, FONT_MINI_SIZE, 0, &cw, &ch );
		ch+=1;	//為了好看
		midSpace = 4;
		selStart=0;
		bShift=false;
		bCatched=false;
		selLength = 0;
		this->style = style;
		type = TypeTextBox;
        //默認大小
		Width = 320;
		Height = 200;

		if(!(style&TEXTBOX_NOVSCROLLBAR)){
			this->style|=TEXTBOX_MUTILINE;
			vScroll = new MyVScroll( this, 0 );
			vScroll->Move( Width-vScroll->BaseWindow::Width(), 0, vScroll->BaseWindow::Width(), Height );
			vScroll->Show();
		}
		SetSize( Width, Height );

		SetText(text);
		SetSelStart(0);
	}

	//Count how many lines there are
	int TextBox::GetTextLines(){
		int i,r,c;
		r=c=0;
		for(i=0;i<strContent.Length();i++){
			c++;
			if(c==maxCharPerLine-1){
				if((unsigned char)strContent[i]>0xA0){
					r++;
					c=0;
					i++;
					continue;
				}
			}
			if(strContent[i]=='\r'||strContent[i]=='\n'||c>=maxCharPerLine){
				r++;
				c=0;
				if( strContent[i]=='\r' && strContent[i+1]=='\n' ) i++;
			}
		}
		return r;
	}

	bool TextBox::HasWordFlag(int pos){
		int i;
		bool bigWord = 0;
		for(i=0;i<strContent.Length();i++){
			if( (unsigned char)strContent[i]>0xA0 )
				bigWord=!bigWord;
			if( i==pos ){
				return bigWord;
			}
		}
		return false;
	}

	//the char position of row*,col*
	int TextBox::GetCharPos(int row, int col){
		int i,r,c;
		r=c=0;
		bool bigWord = 0;
		for(i=0;i<strContent.Length();i++){
			if( row==r&&col==c ){
				return i;
			}
			if( (unsigned char)strContent[i]>0xA0 )
				bigWord=!bigWord;
			c++;
			if(strContent[i]=='\n'||strContent[i]=='\r'||c>=maxCharPerLine){
				if(bigWord){
					bigWord=0;
					i--;
				}
				r++;
				c=0;
				if( strContent[i]=='\r' && strContent[i+1]=='\n' ) i++;
			}
		}
		return -1;
	}

	int TextBox::GetRowFromPos(int pos)
	{
		int i,r,c;
		r=c=0;
		for(i=0;i<strContent.Length();i++){
			c++;
			if(i==pos){
				break;
			}
			if(c==maxCharPerLine-1){
				if((unsigned char)strContent[i]>0xA0){
					r++;
					c=0;
					i++;
					continue;
				}
			}
			if(strContent[i]=='\n'||strContent[i]=='\r'||c>=maxCharPerLine){
				r++;
				c=0;
				if( strContent[i]=='\r' && strContent[i+1]=='\n' ) i++;
			}
		}
		return r;
	}

	int TextBox::RemoveChar(_Char* chr)
	{
		if( (chr->wordFlag&&!EqualChar((chr+1)->value,' '))||!EqualChar(chr->value,' ')||chr->selected ){
			chr->dirty=true;
		}
		chr->value=0;
		chr->wordFlag=0;
		chr->pos=-1;
		chr->selected=false;
	}

	int TextBox::EqualChar(char a, char b ){
		if( (a==b)||
				((a==' '||a=='\n'||a=='\r'||a=='\0') &&
					(b==' '||b=='\n'||b=='\r'||b=='\0')) )
		{
			return true;
		}
		return false;
	}

	int TextBox::ReloadChars(){
		int c,r;
		int p, endline;
		bool bigWord = 0;
		for(r=0;r<colChars;r++){
			p = GetCharPos( vY+r, 0 );
			endline=false;
			for(c=0;c<rowChars;c++)
			{
				_Char* chr = &chars[r*rowChars+c];
				chr->wordFlag=0;
				//如果文本已結束
				if( p<0 ){
					RemoveChar(chr);
					chr->pos=p;
				}else{
					if( (unsigned char)strContent[p]>0xA0 )
						bigWord=!bigWord;
					if( c==rowChars-1 && bigWord ){
						RemoveChar(chr);
						chr->pos=p;
						bigWord=0;
					}else{
						if(bigWord)
							chr->wordFlag=1;

						if( (chr->wordFlag&&!EqualChar((chr+1)->value,strContent[p+1]))||!EqualChar(chr->value,strContent[p]) ){
							chr->dirty=true;
						}

						chr->pos=p;
						chr->value=strContent[p];
						//取下一個字符
						if(!endline){
							p++;
							if(chr->value=='\0'||chr->value=='\r'||chr->value=='\n'){
								endline=true;
								p--;
							}
						}else{
							chr->value=0;
						}
					}
				}
			}
		}
	}

	int TextBox::DrawChars(){
		//文字輸出
		int textColor = winStyle.active.textColor, backColor;
		int boxw = right-left;
		char buf[3]={0,0,0};
		int r, c, x, y, dirty,n;
		Rect rect;
		for(r=0;r<colChars;r++){
			dirty=false;
			for(c=0;c<rowChars;c++)
			{
				n=r*rowChars+c;
				if(chars[n].dirty){
					buf[0]=chars[n].value;
					x = left+c*cw;
					y = top+r*ch;
					if(!dirty){
						dirty=true;
					}
					if(chars[n].selected){
						bitmap->BackColor=winStyle.active.backColor;	//choose
					}else{
						bitmap->BackColor=winStyle.inactive.backColor;
					}
					if( (unsigned char)buf[0]>0xA0 ){
						buf[1]=chars[n+1].value;
						if( (unsigned char)buf[1]>0xA0 ){
							Bitmap::DrawText( bitmap, buf, 2, x, y, FONT_MINI_SIZE, textColor, TEXT_BACKCOLOR );
							chars[n].dirty =
							chars[n+1].dirty = false;
							c++;
						}
					}else{
						if( buf[0]=='\n'||buf[0]=='\r'||buf[0]=='\t' ){
							buf[0]=' ';
						}
						buf[1]=0;
						Bitmap::DrawText( bitmap, buf, 1, x, y, FONT_MINI_SIZE, textColor, TEXT_BACKCOLOR );
						chars[n].dirty = false;
					}
					if((chars[n].value)&&chars[n].pos==selStart|| selStartChar==&chars[n]){
							DrawCursor(x,y);
					}
				}
			}
			//we refresh a line

			if(dirty){
				rect.left = left;
				rect.top = y;
				rect.bottom = y+ch;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色倩网站大全免费| 国产拍欧美日韩视频二区| 日韩午夜在线影院| 综合色中文字幕| 毛片av一区二区三区| 色欧美片视频在线观看| 久久综合九色欧美综合狠狠| 一区二区三区自拍| 国产精品香蕉一区二区三区| 欧美日韩另类国产亚洲欧美一级| 日本一二三不卡| 美日韩一区二区| 欧美日韩性生活| 亚洲情趣在线观看| 成人美女在线观看| 久久色.com| 久久se这里有精品| 91精品国产综合久久婷婷香蕉| 国产精品无遮挡| 国产乱子伦一区二区三区国色天香 | 91网页版在线| 久久久久久久久岛国免费| 欧美a一区二区| 欧美日韩国产三级| 亚洲永久精品大片| 色综合久久88色综合天天免费| 久久久久久黄色| 国产一区二区不卡在线| 欧美tk—视频vk| 麻豆精品国产91久久久久久| 欧美日韩一区二区三区在线| 亚洲欧美激情小说另类| 97久久超碰国产精品| 国产午夜三级一区二区三| 国模少妇一区二区三区| 精品国产99国产精品| 久久成人18免费观看| 精品女同一区二区| 韩国欧美一区二区| 久久久国产一区二区三区四区小说| 九九**精品视频免费播放| 欧美精品一区二区在线观看| 国产在线精品一区在线观看麻豆| 日韩无一区二区| 韩国女主播一区| 国产欧美1区2区3区| 成人美女视频在线观看| 色噜噜狠狠成人中文综合| 午夜精品在线视频一区| 风间由美一区二区三区在线观看 | 欧美精品一二三区| 香蕉久久夜色精品国产使用方法| 欧美视频精品在线观看| 婷婷六月综合亚洲| 精品福利一二区| 国产成人无遮挡在线视频| 欧美国产成人精品| 在线视频国内一区二区| 亚洲成人黄色小说| 精品理论电影在线| 丁香桃色午夜亚洲一区二区三区| 亚洲免费观看在线观看| 欧美丝袜丝交足nylons图片| 日韩福利电影在线| 国产人妖乱国产精品人妖| 99热精品一区二区| 日产国产高清一区二区三区| 久久综合久久综合九色| 91啪九色porn原创视频在线观看| 午夜视频久久久久久| 久久亚洲免费视频| 一本色道a无线码一区v| 免费高清不卡av| 国产精品久久久久9999吃药| 欧美精选午夜久久久乱码6080| 国产一区二区日韩精品| 一区二区在线观看免费视频播放 | 在线观看亚洲精品视频| 人人精品人人爱| 国产精品久久久久影院亚瑟| 欧美在线视频你懂得| 精品一区二区三区免费毛片爱| 国产精品第一页第二页第三页| 7777精品伊人久久久大香线蕉超级流畅| 久久国产福利国产秒拍| 一区二区三区四区在线| 精品国产乱码久久久久久影片| 91蝌蚪porny| 国产精品一级在线| 视频一区免费在线观看| 1000部国产精品成人观看| 日韩午夜激情电影| 欧美日韩一区二区三区视频| 成人性生交大片免费看视频在线| 日日欢夜夜爽一区| 亚洲精品老司机| 久久精品一区二区三区四区| 欧美日韩二区三区| 96av麻豆蜜桃一区二区| 91蜜桃免费观看视频| 偷拍日韩校园综合在线| 国产日韩v精品一区二区| 制服丝袜成人动漫| 成人精品小蝌蚪| 久久国产精品区| 亚洲一区二区三区视频在线播放| 精品国产欧美一区二区| 欧美老女人第四色| 欧美制服丝袜第一页| 成人永久免费视频| 国产在线播精品第三| 亚洲成av人片一区二区梦乃| 中文字幕不卡三区| 欧美日韩在线播放| 国产美女精品在线| 久久福利视频一区二区| 亚洲国产va精品久久久不卡综合| 国产精品―色哟哟| 久久综合网色—综合色88| 在线亚洲精品福利网址导航| 91免费观看视频在线| 国产精品69毛片高清亚洲| 麻豆精品一二三| 日本特黄久久久高潮| 伊人色综合久久天天人手人婷| 国产三级三级三级精品8ⅰ区| 精品国产自在久精品国产| 91麻豆精品国产91久久久使用方法 | 欧美哺乳videos| 欧美一区二区三区精品| 欧美日韩黄色影视| 成人av电影在线| 色婷婷精品久久二区二区蜜臂av| 成人av免费网站| 99久免费精品视频在线观看 | 免费看日韩精品| 久久se精品一区精品二区| 日本不卡不码高清免费观看| 日韩avvvv在线播放| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲黄色免费网站| 亚洲午夜激情av| 亚洲成人免费视频| 日本强好片久久久久久aaa| 男男视频亚洲欧美| 激情文学综合丁香| 国产精一品亚洲二区在线视频| 精品中文字幕一区二区小辣椒| 久久疯狂做爰流白浆xx| 国产一区91精品张津瑜| 日本精品视频一区二区| 欧美日本在线看| 日韩精品在线看片z| 国产午夜精品福利| 1024精品合集| 亚洲线精品一区二区三区| 日本最新不卡在线| 国产精品一区2区| 91在线观看免费视频| 精品婷婷伊人一区三区三| 欧美一区二区大片| 国产亚洲自拍一区| 亚洲图片欧美激情| 日本午夜一区二区| 国产乱码精品1区2区3区| 99久久国产综合色|国产精品| 成人av网站免费观看| 日韩欧美成人一区| 国产精品人人做人人爽人人添| 亚洲男人的天堂网| 美脚の诱脚舐め脚责91 | 亚洲久本草在线中文字幕| 一区二区三区四区高清精品免费观看 | 精品国产一区久久| 国产精品高潮呻吟久久| 婷婷久久综合九色国产成人| 国产麻豆视频一区| 欧美性淫爽ww久久久久无| 国产亚洲va综合人人澡精品| 亚洲免费大片在线观看| 日韩电影在线看| 国产麻豆日韩欧美久久| 国产精品一区二区免费不卡| 91久久精品一区二区| 精品区一区二区| 国产精品国产三级国产aⅴ入口| 天堂影院一区二区| 99久久精品国产一区二区三区| 欧美色图免费看| 国产精品黄色在线观看| 日韩av在线发布| 色菇凉天天综合网| 久久精品水蜜桃av综合天堂| 亚洲一区二区三区小说| 不卡一区二区在线| 一本色道亚洲精品aⅴ| 亚洲欧洲成人av每日更新| 国产精品一区二区在线看| 日韩欧美国产午夜精品| 亚洲一区二区av电影|