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

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

?? tree.cpp

?? 自己實現的一個好用的嵌入式GUI
?? CPP
字號:
#include "stdafx.h"
#include"tree.h"

///////////////////////////////////////////////////CTreeNode實現//////////////////////////////////////////////////////////
CTreeNode::CTreeNode(){
	pData = NULL;
	nindex = 0;
	id = 0;
	pcaption = NULL;
	pparent = NULL;

}
//------------------------------------------------------------------------------------------------------------------------
CTreeNode* CTreeNode::getFirstChild(){

    int nsize = this->child_vector.size();
	if(nsize>=1){
		return child_vector[0];
	}
	return NULL;
}
//------------------------------------------------------------------------------------------------------------------------
CTreeNode* CTreeNode::getSibl_forder(){
  
	CTreeNode* parent = this->pparent;
	if (!parent) {                                  //root
		return NULL;
	}
	if (parent->child_vector.size()-1<=this->nindex) {//self is the last child
		return NULL;
	}
	return parent->child_vector[nindex+1];          //get sibling
		
}
//------------------------------------------------------------------------------------------------------------------------
CTreeNode* CTreeNode::getNext_forder(){ 
	
	CTreeNode* ptmp = NULL;
	CTreeNode* presult = NULL;
	ptmp = this;
	presult = ptmp->getFirstChild();
	if(presult){                                      //get first child
		return presult;
	}
	while (ptmp){ 
		presult=ptmp->getSibl_forder();
		if (presult) {                                //if no child, get sibling
			return presult;
		}
		ptmp=ptmp->pparent;                           //if no child and sibling, get parent
	}
	return NULL;
}
//------------------------------------------------------------------------------------------------------------------------
int CTreeNode::AppendChildNode(CTreeNode* pchildNode){ 
	
   int nresult;                                       
   this->child_vector.push_back(pchildNode);          //add child
   nresult = this->child_vector.size()-1;             //return
   pchildNode->nindex = nresult;                      //child's index
   pchildNode->pparent = this;                        //child's parent
   return nresult;
}
//------------------------------------------------------------------------------------------------------------------------

bool CTreeNode::operator==(const CTreeNode& treenode)const{
	return (id == treenode.id);
}

////////////////////////////////////////////////CTree 實現//////////////////////////////////////////////////////////////
void CTree::AppendNode(CTreeNode* pparentNode, CTreeNode* pchildNode ){
	    if(pchildNode){                          //!=NULL
			if(pparentNode==NULL){
				proot = pchildNode;
				pchildNode->pparent = NULL;
			}else{
				pparentNode->AppendChildNode(pchildNode);
			
			}
		}
}
//------------------------------------------------------------------------------------------------------------------------
 
void CTree::DeleteNode(CTreeNode* pNode){                              //刪除pNode為根的子樹
		CTreeNode* parent = NULL;
		if(pNode){
			parent = pNode->pparent;
			if(parent){
				pNode->pparent = NULL;                              //leave parent
                Cvector_10<CTreeNode*>& thevctr = parent->child_vector;  //adjust the parent's child list
				thevctr.erase(pNode->nindex);
				for(int i=0; i<thevctr.size(); i++){
					thevctr[i]->nindex = i;
				}
			}else{                                                 //delete root node
				proot = NULL;
			}
		}	
}	

////////////////////////////////////////////////CWinManager實現///////////////////////////////////////////////////////////////
void CWinManager::AppendNode(CTreeNode* pparentNode, CTreeNode* pchildNode){
		CTree::AppendNode(pparentNode, pchildNode);
		nodeNum++;
}
//------------------------------------------------------------------------------------------------------------------------
 
void CWinManager::DeleteNode(CTreeNode* pNode){
		CTree::DeleteNode(pNode);
		nodeNum--;
}
//------------------------------------------------------------------------------------------------------------------------
 
///////////////////////////////////////////////////CWindow實現//////////////////////////////////////////////////////////

CWinManager* CWindow::winMnger = NULL;  
int CWindow::winNum = 0;
CWindow* CWindow::fhwnd = NULL;

CWindow::CWindow( int x=0, int y=0, int width=0, int lenth=0, CWindow* phwnd=NULL, char* caption="myWindow"){
		
		hwnd = this;
		this->phwnd = phwnd;
		this->phomeNode = new CTreeNode(); 
		this->phomeNode->pData = this;
		this->x = x;
		this->y = y;
		this->width = width;
		this->lenth = lenth;
		this->caption = caption;
		wintype = 0;                 //default value,win

		if(winNum==0){               //initialize the winManager
			CWindow::winMnger = new CWinManager;
			CWindow::winMnger->AppendNode(NULL, phomeNode);
			this->caption = "DeskTop";
			CWindow::winMnger->renewWinArry(CWindow::winMnger->root());//ini active win arry
		}else if(phwnd==NULL){             //choose root as parent
			CWindow::winMnger->AppendNode(CWindow::winMnger->root(), phomeNode);
			this->phwnd =(CWindow*) CWindow::winMnger->root()->pData;
		}else{
			CWindow::winMnger->AppendNode(phwnd->phomeNode, phomeNode);
			this->phwnd =(CWindow*) CWindow::winMnger->root()->pData;
		}	
		winNum++;
		OnClick = NULL;          //func pointer
		OnKeyDown = NULL;

	}
//------------------------------------------------------------------------------------------------------------------------
 
void CWindow::drawindow(){        //draw this win and its all sub wins
		drawin();            //main win
		CTreeNode* pn = this->phomeNode->getFirstChild();
		CTreeNode* pp = this->phomeNode->getSibl_forder();
		CWindow* pw = NULL;
		          
		while(pn && pn!=pp){
			pw =(CWindow*) pn->pData;
			while(pn && pw->wintype==0){ //not subwin(type==0) but text or button
				pn = pn->getSibl_forder();//skip submainwin(type==0) and it's subwin(type!=0) 				
				if(pn)
					pw = (CWindow*)pn->pData;
			}
			if(pw && pw->wintype!=0)
				pw->drawin();
			if(pn)
				pn = pn->getNext_forder();
		}
        
}
//------------------------------------------------------------------------------------------------------------------------
 
void CWindow::showindow(){
		drawindow();
		if(wintype == 0){
			CWindow::winMnger->renewWinArry(this->phomeNode);
		}
}
//------------------------------------------------------------------------------------------------------------------------
 
void CWindow::set_phwnd(CWindow* phwnd){
		this->phwnd = phwnd;
		//add this to winmanager;
		CWindow::winMnger->DeleteNode(phomeNode);//in constructor CWindow(), phomeNode has been the root's son 
		CWindow::winMnger->AppendNode(phwnd->phomeNode, phomeNode);
}
//------------------------------------------------------------------------------------------------------------------------
 
void CWindow::winProc(CMessage* pmssg){
		switch(pmssg->mssgtype){
		case 0: //click
//			getfocus();
			if(OnClick)
				(*OnClick)(pmssg);
			break;
		case 1://keydown
//			if(OnKeyDown)
//				(*OnKeyDown)(pmssg);
			break;
		}
}
//------------------------------------------------------------------------------------------------------------------------
 
void CWindow::getfocus(){
		 CWindow* fcs_hwnd = CWindow::fhwnd;
         if( fcs_hwnd && fcs_hwnd!=this ){
              fcs_hwnd->freefocus();
         }
		 CWindow::fhwnd = this;            
}
///////////////////////////////////////////////////CText實現//////////////////////////////////////////////////////////
void CText::winProc(CMessage* pmssg){
		CWindow::winProc(pmssg);
		switch(pmssg->mssgtype){
		case 1:// keydown
			if(this==CWindow::get_fhwnd()){//get focus
				if(pmssg->lparam==49){        //'^' pageup
					pageup();
				}else if (pmssg->lparam==50){ // pagedown
					pagedown();
				}else if(pmssg->lparam==51){
                    moveleft();
				}else if(pmssg->lparam==52){
				    moveright();
				}else if(pmssg->lparam=='E'){
				    delet();
				}else{
					input(pmssg->lparam);     //input a char	
				}
				textout();
			}
		//case 0://click
			//pageup();
		}
}
//------------------------------------------------------------------------------------------------------------------------
 
void CText::input(char c){
 //       int cperline = width/font_x;
		if(endpos>=buffsize){
		}else{
		
			for(int i=endpos; i>=curpos; i--){
				text[i+1] = text[i];
			}
			text[curpos] = c;     	
			curpos++;
			endpos++;
			endcol = endpos%cperline; 
			endline = endpos/cperline;
			curcol = (curpos)%cperline;
			curline = (curpos)/cperline;
		
		}
		
}
//------------------------------------------------------------------------------------------------------------------------
 
void CText::textout(){
        clearscrn(x, y+10, x+width, y+lenth);
        CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
				
		if(endline>=cpercol-2 && curcol==cperline-1){
			linedown();
			clearscrn(x, y+10, x+width, y+lenth);
		}
		int dspendline = dspstartline + cpercol -2;
		dspendline = (dspendline>endline)?endline:dspendline;//get the last logic line to be displayed
               
		for(int i=dspstartline; i<=dspendline; i++){
            for(int j=0; j<cperline; j++){
				if(text[i*cperline+j]=='\0'){
					break;
				}
				pDC->TextOut(this->x+j*font_x+4, this->y+12+(i-dspstartline)*linegap, text[i*cperline+j]);
			}
		}
	//	pDC->TextOut(this->x+curcol*font_x+4, this->y+12+(curline-dspstartline)*linegap, "^");//cursor
}
//------------------------------------------------------------------------------------------------------------------------
 
void CText::drawin(){
		CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
        pDC->Rectangle(CRect(x, y+10, x+width, y+lenth));
		pDC->TextOut(x+5, y-10, caption);

		textout();
		
		if(CWindow::fhwnd){
			pDC->TextOut(0, 0, CWindow::fhwnd->caption);
		}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//CMessage* click_map(int x, int y){

//};

void message_map(CMessage* pmssg){//;//, CWindow*& phwnd, CWindow*& hwnd ){//, CWindow* subWin){//暫時設成CWindow*, int,以后改成void, message
	//look at the active win arry first
	if(pmssg->hwnd){  // if the target win be given
		pmssg->hwnd->winProc(pmssg);
		return;
	}
	CWindow* phwnd = NULL;
	CWindow* hwnd = NULL;
    int x = pmssg->x;
	int y = pmssg->y;
	CTreeNode* pnode = NULL;
	Cvector_10<CTreeNode*>& theArry = CWindow::winMnger->activeWinArry;//reference
    CWindow* pwin = NULL;

	for(int i=theArry.size()-1; i>=0; i--){	
	(CWindow*) pwin = (CWindow*)(theArry[i]->pData);
		if(pwin && pwin->capture(x, y)){
			if(pwin->phomeNode!=CWindow::winMnger->root()) //keep the root at the botton of theArry
				  CWindow::winMnger->renewWinArry(pwin->phomeNode); 
			phwnd = pwin;                    //return value
			break;                            //out
		}
	}
	// not in win arry
	pnode = CWindow::winMnger->root();

	while((!phwnd) && pnode){
		pwin = (CWindow*) pnode->pData;
		if(pwin->capture(x, y) && pwin->wintype==0){  //win,not text or button     
			theArry.push_back(pnode);                 //add new pwin into the arry
			phwnd = pwin;     
		}
		pnode = pnode->getNext_forder();
	}

	//let the message map to the target win
	if(phwnd && phwnd->phomeNode!=CWindow::winMnger->root()){//to desktop, we just do draw, for other main win, we will try to get the target subwin(text or button)
		pnode = phwnd->phomeNode->getFirstChild();             
	
		while(pnode && pnode!=phwnd->phomeNode->getSibl_forder()){        //need change ,here we have not consider pnode->pData.winType==0?			
			pwin = (CWindow*)pnode->pData;              //let the message map to the target win
			if(pwin->wintype!=0 && pwin->capture(x, y)){//message get the target win(button or text, not window)
				hwnd = pwin;
				break;
			}
			pnode = pnode->getNext_forder();
		}
	}
	//draw window and response message event
	if(phwnd){// message hit a main window 
			phwnd->getfocus();
		if(phwnd->phomeNode==CWindow::winMnger->root()){ //desktop
			phwnd->drawin(); 
            
			for(int i=1; i<theArry.size(); i++){//遍歷活動窗口棧,note: activeArry[0]is root node
				pwin = (CWindow*)theArry[i]->pData;
				pwin->drawindow();//畫出所有活動窗口(及所有子窗口),and pushu the main win to theArry                                                             子窗口)
			}
		}else{
			phwnd->drawindow();
		}
		if(hwnd){//message hit a subwin like button, text and so on 
			hwnd->getfocus();
			hwnd->winProc(pmssg);
		}
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲风情在线资源站| 蜜芽一区二区三区| 欧美另类变人与禽xxxxx| 久久99精品久久久久久久久久久久 | 日韩欧美视频在线| av中文字幕一区| 国产在线观看一区二区| 亚洲444eee在线观看| 欧美亚洲国产怡红院影院| 欧美日韩卡一卡二| 亚洲小少妇裸体bbw| 97se亚洲国产综合自在线观| 久久久久九九视频| 国产精品综合一区二区三区| 久久品道一品道久久精品| 亚洲乱码国产乱码精品精小说 | 欧美成人官网二区| 在线观看亚洲精品视频| 成人性生交大片| 久久国产成人午夜av影院| 亚洲在线视频网站| 中文字幕一区二区视频| 久久一夜天堂av一区二区三区| 欧美性猛片xxxx免费看久爱| 成人动漫精品一区二区| 国产乱淫av一区二区三区 | 热久久一区二区| 亚洲综合成人网| 亚洲女性喷水在线观看一区| 国产清纯白嫩初高生在线观看91| 日韩欧美一二区| 日韩欧美中文字幕公布| 欧美巨大另类极品videosbest| 一本大道久久a久久精品综合 | 精品日韩成人av| 91精品国产综合久久精品图片 | 热久久一区二区| 日韩高清不卡一区| 日本视频一区二区| 香蕉成人伊视频在线观看| 亚洲成人午夜影院| 亚洲综合免费观看高清完整版在线 | 洋洋成人永久网站入口| 亚洲欧美日韩一区二区| 自拍偷在线精品自拍偷无码专区| 国产精品视频一区二区三区不卡| 久久久不卡网国产精品一区| 久久精品一区蜜桃臀影院| 国产亚洲视频系列| 国产区在线观看成人精品| 国产三级精品三级在线专区| 中文字幕不卡在线观看| 中文字幕一区日韩精品欧美| 亚洲天堂av一区| 一区二区三区四区av| 亚洲一级二级在线| 午夜精品福利一区二区蜜股av| 日韩av一区二| 久久爱www久久做| 国产一二三精品| 成人性视频网站| 色婷婷精品久久二区二区蜜臀av | 玉足女爽爽91| 日韩精品久久久久久| 另类小说图片综合网| 国产精品一区二区久激情瑜伽| 成人综合婷婷国产精品久久蜜臀| 色www精品视频在线观看| 欧美高清视频一二三区| 欧美va亚洲va香蕉在线| 欧美激情综合五月色丁香小说| 亚洲欧美在线另类| 亚洲成av人片www| 国产精品91一区二区| 99精品国产视频| 欧美一区二区三区四区在线观看| 2021中文字幕一区亚洲| 亚洲欧美偷拍三级| 日本91福利区| 91天堂素人约啪| 欧美一区二区观看视频| 欧美激情中文字幕| 亚洲电影在线播放| 国产毛片精品国产一区二区三区| av网站免费线看精品| 欧美日韩在线三级| 国产日产精品一区| 视频一区在线播放| yourporn久久国产精品| 欧美一区2区视频在线观看| 中文一区在线播放| 日欧美一区二区| av亚洲精华国产精华精华| 7777精品伊人久久久大香线蕉完整版| 久久久精品一品道一区| 亚洲国产精品综合小说图片区| 国产精品18久久久久久久久| 欧美日韩国产成人在线91| 国产日韩精品一区| 日韩精品久久久久久| 91丨九色丨蝌蚪富婆spa| 精品国产乱码久久久久久夜甘婷婷| 亚洲精品视频在线观看免费| 国产一区福利在线| 欧美日韩视频一区二区| 国产精品第五页| 极品美女销魂一区二区三区免费| 色国产精品一区在线观看| 久久久五月婷婷| 欧美96一区二区免费视频| 色视频成人在线观看免| 久久精品视频在线免费观看| 日本成人中文字幕在线视频| 在线观看视频91| 亚洲色图制服丝袜| 福利电影一区二区| 久久这里只有精品首页| 麻豆成人综合网| 欧美日韩亚洲高清一区二区| 一区二区三区高清在线| voyeur盗摄精品| 欧美国产日本视频| 国产成人精品亚洲日本在线桃色 | 国产精品一区二区免费不卡 | 国产成人精品免费网站| 亚洲精品一线二线三线| 日韩专区欧美专区| 欧美精品自拍偷拍动漫精品| 亚洲电影视频在线| 在线观看日韩毛片| 亚洲综合一二区| 91黄色免费版| 亚洲国产综合色| 欧美色视频在线| 亚洲成av人片在线观看无码| 欧美日韩视频第一区| 婷婷久久综合九色综合伊人色| 在线观看免费视频综合| 伊人婷婷欧美激情| 欧美色图天堂网| 午夜视频在线观看一区二区三区| 欧美色涩在线第一页| 天天色图综合网| 欧美一区二区久久久| 麻豆精品国产传媒mv男同| 欧美精品一区二区不卡| 精品系列免费在线观看| 久久免费精品国产久精品久久久久| 久久99国产精品尤物| 久久色.com| 成人h版在线观看| 亚洲精品你懂的| 91麻豆精品国产91久久久久久 | 亚洲欧美日韩国产成人精品影院 | 99国产欧美另类久久久精品| 亚洲美女偷拍久久| 欧美三级日韩三级国产三级| 免费成人在线影院| 亚洲国产精品成人久久综合一区| 色综合视频一区二区三区高清| 亚洲午夜久久久久久久久电影院 | 国产精品综合在线视频| 国产精品成人免费精品自在线观看| 91视视频在线直接观看在线看网页在线看| 亚洲视频网在线直播| 3d动漫精品啪啪1区2区免费| 韩国三级电影一区二区| 亚洲欧洲制服丝袜| 日韩午夜激情免费电影| 国产河南妇女毛片精品久久久| 日韩久久一区二区| 日韩一区二区影院| 不卡电影免费在线播放一区| 亚洲成年人影院| 日韩午夜激情视频| 成人av在线观| 日韩欧美另类在线| 国产一区999| 亚洲少妇30p| 欧美大片日本大片免费观看| 国产剧情av麻豆香蕉精品| 国产精品成人一区二区艾草 | 成人的网站免费观看| 国产亚洲女人久久久久毛片| 在线观看成人免费视频| 久久国产三级精品| 中文字幕va一区二区三区| 欧美一级二级三级乱码| 成人18视频在线播放| 亚洲高清免费一级二级三级| 制服丝袜中文字幕一区| 99在线视频精品| 亚洲h精品动漫在线观看| 精品女同一区二区| 欧美日韩视频在线观看一区二区三区| 精品中文字幕一区二区小辣椒| 中文字幕精品一区二区三区精品| 色婷婷综合久久久中文字幕| 国产在线不卡一区| 一区二区三区在线视频播放|