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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? guilib.cpp

?? 自己實現(xiàn)的一個好用的嵌入式GUI
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include"stdafx.h"

#include"guilib.h"
#include<ctype.h>
#include<string.h>
#include<stdarg.h>
#include<stdio.h>
//////////////////////////////////////////////////////////////globe various//////////////////////////////////////////////////////
CNode* gl_focus = NULL;     //point to the node with text or button
CNode* gl_mainfocus = NULL; //point to the node with win
void*  gl_pointerCollector[OBJ_NUM];
int    gl_pointerType[OBJ_NUM];
CWin*  gl_desktop = NULL;
int    gl_pointerNum = 0;
CVector* gl_activeWinVec = NULL;
CMssg* gl_mssg = NULL;
void* gl_pdata = NULL;
CVector* gl_mssgVec = NULL; 
/////////////////////////////////////////////////globe pointer manage/////////////////////////////////////////////////////
void collectPointer(void* pointer, int ptrType){

	gl_pointerCollector[gl_pointerNum] = pointer;
	gl_pointerType[gl_pointerNum] = ptrType;
	gl_pointerNum++;
}
void iniGui(CWin* pstartWindow){

//	gl_pdata = newCData(NULL, DEF_TYPE);
	gl_mssg = newCMssg(NULL, WM_DEF, 0, 0); 
    gl_mssgVec = newCVector();
	gl_activeWinVec = newCVector();	
	CRect1* deskRect = newCRect(30, 30, SCREEN_X, SCREEN_Y);
    gl_desktop = newCWin(deskRect, "desktop");
//    void* pdesktopData = newCData(gl_desktop, CWIN);

//	CData* pstartWinData = newCData(pstartWindow, CWIN);//start node
	
	
//	gl_activeWinVec->push_back(gl_desktop, gl_activeWinVec);
//    gl_activeWinVec->push_back(pstartWindow, gl_activeWinVec);//push startWindow into activeWinVec
	
    show(gl_desktop);//, CWIN);
	show(pstartWindow);//, CWIN);

}
void freeAll(){

	int i=0; //void* p=NULL;
	for(i=0; i<gl_pointerNum; i++){

		//p = gl_pointerCollector[i];

		//if(p!=NULL){ free(p); p=NULL;}
		if(gl_pointerCollector[i]){
			free(gl_pointerCollector[i]);
		}
		gl_pointerCollector[i] = NULL;
		gl_pointerType[i] = TYPE_DEF;
			
	}
	gl_pointerNum = 0;
//   gl_activeWinVec->size = 0;
//	gl_activeWinVec->head = NULL;
//	gl_activeWinVec->tail = NULL;
}

void freeOne(void* pointer){
	if(pointer==NULL){  
		return; 
	}
	int i; 
	for(i=0; i<gl_pointerNum; i++){
		if(gl_pointerCollector[i]==pointer){
				gl_pointerCollector[i] = NULL;
				gl_pointerType[i] = TYPE_DEF;
				break;
		}
		
	}
	free(pointer);
}

int getPtrType(void* ptr){

	int i;
	for(i=0; i<gl_pointerNum; i++){
		if(gl_pointerCollector[i]==ptr){
			return gl_pointerType[i];
		}
	}
	return TYPE_DEF;
}
//////////////////////////////////////////////////////////////vector//////////////////////////////////////////////////////

//function for CVector operate

CVector* newCVector(){
    
	CVector* self = (CVector*)malloc(sizeof(CVector));
	self->size = 0;
	self->head = NULL;
	self->tail = NULL;
    //member function
    self->push_back = push_back;
	self->eraseByIndex = eraseByIndex;
    self->eraseByKey = eraseByKey;
	self->getByIndex = getByIndex;
	self->getIndex = getIndex;
	self->clear = clear;
    collectPointer(self, CVECTOR);//add to pointercollector
	return self;	
}
CNode* newCNode(){

	CNode* self = (CNode*)malloc(sizeof(CNode));
	self->next = NULL;
	self->pdata = NULL;
	collectPointer(self, CNODE);
	return self;
}


CNode* push_back(void* pdata, CVector* self){

		CNode* p = newCNode();    //create a home node for the elem
		p->pdata = pdata;
		p->next = NULL;
		if( self && self->tail){                //not empty
			self->tail->next = p;      //add to the end of the list, become the new tail
		}else{                   //empty list
			self->head = p;
		}
		self->tail = p;
		self->size++;
		push_back_hook(p, pdata);
		return p;
}
void push_back_hook(CNode* pnewNode, void* pdata){
    
	int winType = TYPE_DEF;
	CWin* pwin = NULL;
	CButtn* pbtn = NULL;
	CText* ptxt = NULL;

	winType = getPtrType(pdata);

	switch(winType){
	case CWIN:
		    pwin = (CWin*)pdata;
			pwin->pExtra = pnewNode;
			break;
	case CBUTTN:
			pbtn = (CButtn*)pdata;
			pbtn->pExtra = pnewNode;
			break;
    case CTEXT:
			ptxt = (CText*)pdata;
			ptxt->pExtra = pnewNode;
			break;
	}
	
}
void eraseByIndex(int nindex, CVector* self){

	   	if(nindex>=0 && self && nindex<self->size){			
		    if(self->head==self->tail){      //has only one node 
		    	self->head = NULL; 
		    	self->tail = NULL;
			}else if(nindex==0){ //delete head node (list have at least two nodes)
		    	CNode* q = self->head; 
		    	self->head = self->head->next;	
			}else{
		    	CNode* p = self->head;
				int i;
		    	for(i=0; i<nindex-1; i++){  //find target node which is before p
		    		p = p->next;
				}
		    	if(p->next==self->tail){              //target node is tail
			    	self->tail = p;
				}else{                          //target node is between head and tail
			    	p->next = p->next->next;
				}
			}
		    self->size--;
		}

}
void eraseByKey(const void* pdata, CVector* self){
    
	   CNode* p = NULL;
       CNode* q = NULL;	
	   if(self && self->head && self->head->pdata==pdata){				//delete head node
        	if(self->head==self->tail){                         //has only one node
		    	self->head = NULL; 
		    	self->tail = NULL;
			}else{                                  //has at least two nodes
		    	self->head = self->head->next;	
			}
			self->size--;
			return;
		}

							//record the p's forhead
		for(p=self->head; p!=self->tail; q=p, p=p->next ){
			if(p->pdata==pdata){                       //find the target node
				q->next = p->next;                   //target is between head and tail
				self->size--;
				return;
			}
		}
		if(p && p==self->tail && p->pdata==pdata){           //delete tail node
			self->tail = q;
            self->size--;
		} 

}

void* getByIndex(int nindex, CVector* self){

	if(nindex>=0 && nindex<self->size){
			CNode* p = NULL;
			int j = 0;
			for(j=0,p=self->head; j<nindex; j++,p=p->next);
			return p->pdata;
	}
    return NULL;	
}

int getIndex(const void* pdata, CVector* self){

    int i=0;
	void* ptemp = NULL;
	for(i=0; i<self->size; i++){
        ptemp = self->getByIndex(i, self);
		if(ptemp==pdata){
			return i;
		}
	}
	return -1;
}

void clear(CVector* self){
	self->size = 0;
	self->head = NULL;
	self->tail = NULL;
}
//////////////////////////////////////////////////////////////CData////////////////////////////////////////////////////////
/*CData* newCData(void* pobj, int wintype){

	CData* self = (CData*)malloc(sizeof(CData));
	self->wintype = wintype;
	self->pobj = pobj;
	collectPointer(self, CDATA);
	return self;
}*/
//////////////////////////////////////////////////////////////CRec////////////////////////////////////////////////////////

CRect1* newCRect(int x, int y, int w, int l){

	CRect1* self = (CRect1*)malloc(sizeof(CRect1));
	self->x = x;
	self->y = y;
    self->w = w;
	self->l = l;
	collectPointer(self, CRECT);
	return self;
}
//////////////////////////////////////////////////////////////CMssg////////////////////////////////////////////////////////

CMssg* newCMssg(void* pdata, int type, int lparam, int wparam){

	CMssg* self = (CMssg*)malloc(sizeof(CMssg));
	self->pdata = pdata;
	self->type = type;
	self->lparam = lparam;
	self->wparam = wparam;
	collectPointer(self, CMSSG);
	return self;
}
//////////////////////////////////////////////////////////////CWin////////////////////////////////////////////////////////
CWin* newCWin(CRect1* prec, char* caption){

    int i;
	CWin* self = (CWin*)malloc(sizeof(CWin));
	self->prec = prec;
    self->caption = caption;
	self->pchild_vec = newCVector();
	
	for(i=0; i<MSSG_NUM; i++){
		self->winproc[i] = NULL;
	}
	self->winproc[WM_SHOW1] = OnShow;    //default proc
	self->winproc[WM_CHANGEFOCUS1] = OnChangeFocus;//focus;
	self->winproc[WM_CLOSE1] = OnClose;
//	self->addComponent = addComponent;
//	self->drawWin = drawWin;
	collectPointer(self, CWIN);
	return self;
}

void changeFocus(){
	
	//get topwin in activeWinVec;

	eraseFocus();

	CNode* ptopNode= gl_activeWinVec->tail;     
	if(ptopNode == NULL){

		gl_mainfocus = NULL;
		gl_focus = NULL;

	}else if(gl_mainfocus!=ptopNode){//if top win is changed, renew the two globe pointer         
	
		gl_mainfocus = ptopNode;
		gl_focus = gl_mainfocus;

	}else if(gl_focus!=gl_mainfocus){ //gl_mainfocus==ptopNode && gl_mainfocus!=gl_focus                                                       
		if(gl_focus && getPtrType(gl_focus)==CNODE && gl_focus->next){
	//	if(gl_focus && gl_focus->next){
			gl_focus = gl_focus->next;
		}else{
			gl_focus = gl_mainfocus;
		}
    
	}else{								//gl_focus==gl_mainfocus
        CWin* pwin = (CWin*)gl_mainfocus->pdata;
//		if(pwin && getPtrType(pwin)==CWIN && pwin->pchild_vec && pwin->pchild_vec->head)
//		int nPtrTp = getPtrType(pwin);
//	    if(nPtrTp==CWIN && pwin->pchild_vec->size>0)
			gl_focus = pwin->pchild_vec->head;
	}
//	if(gl_activeWinVec->size!=1){//if only desktop left, need no focustag
		tagFocus();
//	}else{
//		eraseFocus();
//	}
	
}

void tagFocus(){

	void* pdata = NULL;
	CWin* pwin = NULL;
	CButtn* pbtn = NULL;
	CText* ptxt = NULL;
    CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
    int nptrTp = getPtrType(gl_focus);
	if(gl_focus && nptrTp==CNODE && gl_focus->pdata){
//    if(gl_focus && gl_focus->pdata){
		pdata = gl_focus->pdata;
		int winType = getPtrType(pdata); 
		switch(winType){
		case CWIN:
			pwin = (CWin*)pdata;
			if(pwin->caption != "desktop")
				pDC->TextOut(pwin->prec->x-10, pwin->prec->y, '>');
			break;
		case CBUTTN:
			pbtn = (CButtn*)pdata;
            pDC->TextOut(pbtn->prec->x-10, pbtn->prec->y, '>');
			break;
		case CTEXT:
			ptxt = (CText*)pdata;
			pDC->TextOut(ptxt->prec->x-10, ptxt->prec->y, '>');
			break;
		}
	}
	(AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC);
}
void eraseFocus(){

	void* pdata = NULL;
	CWin* pwin = NULL;
	CButtn* pbtn = NULL;
	CText* ptxt = NULL;
    CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
    int nptrTp = getPtrType(gl_focus);
	if(gl_focus && nptrTp==CNODE && gl_focus->pdata){
//	if(gl_focus && gl_focus->pdata){

		pdata = gl_focus->pdata;
        int winType = getPtrType(pdata); 
		switch(winType){
		case CWIN:
			pwin = (CWin*)pdata;
            pDC->TextOut(pwin->prec->x-10, pwin->prec->y, "  ");
			break;
		case CBUTTN:
			pbtn = (CButtn*)pdata;
            pDC->TextOut(pbtn->prec->x-10, pbtn->prec->y, "  ");
			break;
		case CTEXT:
			ptxt = (CText*)pdata;
			pDC->TextOut(ptxt->prec->x-10, ptxt->prec->y, "  ");
			break;
		}
	}
    (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC);
}

void setFocus(void* p){

	eraseFocus();
	CWin* pwin = NULL;
	CButtn* pbtn = NULL;
	CText* ptxt = NULL;
	int winType = getPtrType(p);
	switch(winType){
	case CWIN:
		pwin = (CWin*)p;
		if(pwin->pExtra && gl_focus!=pwin->pExtra){
			gl_mainfocus = (CNode*)pwin->pExtra;
			gl_focus= gl_mainfocus;
		}
		break;
	case CBUTTN:
		pbtn = (CButtn*)p;
		if(pbtn->pExtra && gl_focus!=pbtn->pExtra){
			gl_focus = (CNode*)pbtn->pExtra;
			gl_mainfocus = (CNode*)pbtn->parentWin->pExtra;
		}
		break;
	case CTEXT:
		ptxt = (CText*)p;
		if(ptxt->pExtra && gl_focus!=ptxt->pExtra){
			gl_focus = (CNode*)ptxt->pExtra;
			gl_mainfocus = (CNode*)ptxt->parentWin->pExtra;
		}
		break;
	}
	tagFocus();
}
void OnChangeFocus(CMssg* pmssg){

    changeFocus();

}

void addComponent(CWin* pwin, void* pdata){//, int wintype){

//	 CData* pdata = newCData(pobj, wintype);
	

	 pwin->pchild_vec->push_back(pdata, pwin->pchild_vec);

	 
}

void drawWin(CWin* self){

	 CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
	 pDC->Rectangle(self->prec->x, self->prec->y, self->prec->x+self->prec->w, self->prec->y+self->prec->l);
     pDC->TextOut(self->prec->x+DSP_GAP, self->prec->y+DSP_GAP, self->caption );
	 (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC);
}
//////////////////////////////////////////////////////////////CButtn///////////////////////////////////////////////////////
CButtn* newCButtn(CWin* parentWin, CRect1* prec, char* caption){
	int i;
	CButtn* self = (CButtn*)malloc(sizeof(CButtn));
	self->prec = prec;
    self->caption = caption;
	self->parentWin = parentWin;

	for(i=0; i<MSSG_NUM; i++){
		self->winproc[i] = NULL;
	}
	self->winproc[WM_SHOW1] = OnShow;    //default proc
	self->winproc[WM_CHANGEFOCUS1] = OnChangeFocus;//focus;
	self->winproc[WM_CLOSE1] = OnClose;
	self->winproc[WM_CLICK1] = OnButtnClick;//for test
	collectPointer(self, CBUTTN);
	if(parentWin){
		addComponent(parentWin, self);//, CBUTTN);
	}
//	self->drawButtn = drawButtn;
	
	
	return self;
}


void drawButtn(CButtn* self){

	 CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC();
	 pDC->Rectangle(self->prec->x, self->prec->y, self->prec->x+self->prec->w, self->prec->y+self->prec->l);
     pDC->TextOut(self->prec->x+DSP_GAP, self->prec->y+DSP_GAP, self->caption );
	 (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC);
}


//////////////////////////////////////////////////////////////CText///////////////////////////////////////////////////////
CText* newCText(CWin* parentWin, CRect1* prec, char* caption, int font_x, int font_y){
	int i=0;
	CText* self = (CText*)malloc(sizeof(CText));
	self->parentWin = parentWin;
	self->prec = prec;
	self->caption = caption;
	self->font_x = font_x;
	self->font_y = font_y;
	self->pformatVec = newCVector();
	self->curPos = 0;
	self->endPos = 0;
	self->dspChBgn = 0;
	self->dspChEnd = 0;
	self->dspLnBgn = 0;	
	self->text[0] = '\0';
	
	for(i=0; i<MSSG_NUM; i++){
		self->winproc[i] = NULL;
	}
	self->winproc[WM_CHANGEFOCUS1]=OnChangeFocus;
	self->winproc[WM_KEYDOWN1]=OnKeyDown;
    self->winproc[WM_DBKEYDOWN1]=OnDbKeyDown;
	self->winproc[WM_TRIKEYDOWN1]=OnDbKeyDown;
	collectPointer(self, CTEXT);
	if(parentWin){
		addComponent(parentWin, self);//, CBUTTN);
	}
	
	return self;
}
void drawText(CText* self){
     

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合自拍偷拍| 91女神在线视频| 日本一区中文字幕| 午夜精品国产更新| 首页国产欧美久久| 午夜免费久久看| 男女激情视频一区| 另类小说图片综合网| 国产最新精品精品你懂的| 精品系列免费在线观看| 国内国产精品久久| 成人午夜av电影| 色婷婷狠狠综合| 欧美日韩一区二区三区高清| 91麻豆精品久久久久蜜臀| 日韩精品一区二区三区中文精品| xnxx国产精品| 亚洲国产精品v| 亚洲免费av高清| 天天做天天摸天天爽国产一区| 日韩和欧美的一区| 激情偷乱视频一区二区三区| 国产成人av自拍| av在线免费不卡| 欧美日韩国产影片| 久久综合久久鬼色中文字| 亚洲国产高清在线观看视频| 亚洲人成伊人成综合网小说| 午夜亚洲国产au精品一区二区| 麻豆91在线看| www.欧美色图| 欧美日韩aaa| 久久久精品tv| 亚洲专区一二三| 精品一区二区在线播放| 成人免费高清视频| 在线不卡免费欧美| 欧美国产成人在线| 午夜精品国产更新| 国产成人免费视频网站 | 日本va欧美va精品发布| 裸体歌舞表演一区二区| 粉嫩av一区二区三区| 欧美亚洲一区三区| 国产视频不卡一区| 一区二区三区美女| 国产一区激情在线| 欧美日精品一区视频| 精品国产乱码久久久久久久久| 亚洲欧洲色图综合| 精品午夜一区二区三区在线观看 | 日本一区免费视频| 亚洲最大的成人av| 国产精品一区不卡| 欧美日韩免费不卡视频一区二区三区| 2020日本不卡一区二区视频| 亚洲一区二区视频在线| 国产精品123| 日韩一级欧美一级| 亚洲综合一二区| 成人教育av在线| 91精品国产一区二区三区蜜臀| 自拍偷拍亚洲激情| 国产精品一区久久久久| 制服丝袜亚洲网站| 亚洲美女少妇撒尿| 国产资源精品在线观看| 91精品在线一区二区| 亚洲欧洲中文日韩久久av乱码| 黄一区二区三区| 欧美日韩在线播放一区| 国产精品国产馆在线真实露脸 | 激情综合五月天| 在线视频你懂得一区二区三区| 国产人成一区二区三区影院| 捆绑变态av一区二区三区 | 亚洲精品国产一区二区精华液| 九色综合国产一区二区三区| 欧美日韩视频一区二区| 亚洲另类春色国产| 成人久久视频在线观看| 精品卡一卡二卡三卡四在线| 亚洲sss视频在线视频| 94-欧美-setu| 中文欧美字幕免费| 精久久久久久久久久久| 欧美一区二区三区四区在线观看| 亚洲一区在线观看免费| 91啪亚洲精品| 国产精品国产自产拍高清av| 国产精品88av| 国产午夜精品一区二区三区四区| 奇米影视一区二区三区| 在线综合视频播放| 亚洲sss视频在线视频| 欧美影院精品一区| 亚洲最色的网站| 欧美日韩在线综合| 亚洲一级片在线观看| 在线视频一区二区三区| 亚洲最快最全在线视频| 欧美日韩在线直播| 日韩国产高清影视| 日韩午夜三级在线| 久久精品国产精品亚洲精品| 精品精品欲导航| 精品制服美女丁香| 国产亚洲欧美色| 不卡av在线网| 亚洲欧洲三级电影| 在线观看区一区二| 日韩一区精品字幕| 日韩一区二区精品葵司在线 | 91免费观看视频在线| 亚洲同性同志一二三专区| 91久久久免费一区二区| 亚洲mv在线观看| 欧美不卡激情三级在线观看| 精品一区二区三区在线播放| 国产欧美日韩综合| 91啪九色porn原创视频在线观看| 一区二区三区不卡在线观看 | 欧美一区二区三区人| 老司机午夜精品99久久| wwwwww.欧美系列| 成人手机在线视频| 一区二区三区精品在线观看| 欧美精选午夜久久久乱码6080| 麻豆精品蜜桃视频网站| 国产日韩在线不卡| 色综合色狠狠天天综合色| 亚洲成人动漫在线观看| 精品剧情v国产在线观看在线| 福利一区在线观看| 一区二区三区欧美视频| 日韩一区二区三区电影在线观看| 国产成人一区二区精品非洲| 亚洲日本在线天堂| 欧美高清dvd| 国产99久久久国产精品免费看| 亚洲精品水蜜桃| 欧美精品一区二区久久婷婷| 成人18视频在线播放| 日韩精品一二区| 欧美激情综合五月色丁香小说| 欧美天堂亚洲电影院在线播放 | 91精品国产综合久久精品性色| 久久国内精品视频| 亚洲欧美日韩在线不卡| 日韩欧美www| 色www精品视频在线观看| 久久成人免费日本黄色| 一区二区三区在线观看国产| 欧美一区午夜视频在线观看| www.欧美色图| 久久97超碰色| 亚洲国产精品欧美一二99| 国产日韩欧美在线一区| 欧美日韩一区二区三区不卡| 成人网男人的天堂| 蜜臀av性久久久久蜜臀aⅴ| 亚洲女女做受ⅹxx高潮| 2020日本不卡一区二区视频| 欧美系列一区二区| 成人午夜又粗又硬又大| 久久www免费人成看片高清| 一卡二卡三卡日韩欧美| 久久九九国产精品| 欧美日韩另类一区| 91麻豆国产精品久久| 国产美女在线精品| 免费观看在线色综合| 亚洲一区二区在线观看视频 | 久久国产成人午夜av影院| 亚洲精品国产无套在线观| 国产日韩欧美一区二区三区乱码 | 日韩黄色一级片| 亚洲情趣在线观看| 欧美经典三级视频一区二区三区| 日韩精品一区二区三区蜜臀| 精品视频1区2区| 色婷婷国产精品综合在线观看| 国产成人精品三级麻豆| 激情久久五月天| 老司机精品视频在线| 日韩黄色免费电影| 亚洲一区成人在线| 伊人色综合久久天天| 亚洲色欲色欲www| 国产精品不卡一区二区三区| 国产欧美一区在线| 久久久国产一区二区三区四区小说 | 国产亲近乱来精品视频| 日韩一本二本av| 777久久久精品| 欧美三级日韩三级国产三级| 91福利国产精品| 日本高清不卡aⅴ免费网站| 波波电影院一区二区三区| 国产成人在线视频网址|