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

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

?? guilib.cpp

?? 自己實現的一個好用的嵌入式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){
     

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xingq一区二区| 久久夜色精品国产欧美乱极品| 热久久国产精品| 国产精品国产精品国产专区不蜜| 欧美日韩免费视频| 国产高清不卡二三区| 五月天激情小说综合| 国产欧美精品一区aⅴ影院| 欧美一区二区二区| 在线免费观看视频一区| 风间由美一区二区av101| 毛片一区二区三区| 午夜精品一区在线观看| 亚洲人成精品久久久久| 国产精品久久一级| 久久久www免费人成精品| 91精品欧美久久久久久动漫| 在线观看日产精品| www.色综合.com| 国产成人自拍高清视频在线免费播放| 天天色综合成人网| 亚洲一区二区三区四区中文字幕| 国产精品福利在线播放| 久久综合色综合88| 欧美va亚洲va| 欧美一区二区三区啪啪| 欧美日韩一区二区电影| 欧美性一级生活| 色狠狠色噜噜噜综合网| 99精品欧美一区二区三区小说| 风间由美性色一区二区三区| 国产不卡在线视频| 国产**成人网毛片九色| 国产精品系列在线观看| 国产综合久久久久影院| 韩国女主播成人在线| 国产一区二区视频在线| 紧缚奴在线一区二区三区| 精品亚洲成a人在线观看| 蓝色福利精品导航| 精品一区二区三区免费| 极品少妇一区二区| 国产揄拍国内精品对白| 国产老妇另类xxxxx| 国产v综合v亚洲欧| 成人福利视频在线看| 色综合天天综合网天天狠天天| 色综合久久综合网欧美综合网| 91视视频在线直接观看在线看网页在线看| 成人理论电影网| 在线观看av不卡| 5566中文字幕一区二区电影| 日韩免费电影一区| 国产亚洲精品免费| 综合久久久久综合| 亚洲影院久久精品| 日韩国产欧美一区二区三区| 久久疯狂做爰流白浆xx| 国产成人三级在线观看| 99久久国产综合色|国产精品| 日本电影欧美片| 欧美丰满少妇xxxxx高潮对白| 欧美videos大乳护士334| 欧美高清在线一区| 一区二区在线观看av| 日本午夜一本久久久综合| 国产精品一品二品| 色88888久久久久久影院按摩 | 国产偷国产偷亚洲高清人白洁 | 久久久久国产精品厨房| 国产精品超碰97尤物18| 亚洲免费观看在线视频| 青青草97国产精品免费观看无弹窗版| 国产资源在线一区| 色婷婷综合久久久| 日韩精品一区二区三区中文不卡| 中文字幕高清不卡| 首页亚洲欧美制服丝腿| 国产在线精品免费av| 91福利视频久久久久| xnxx国产精品| 亚洲无人区一区| 国产精品一区二区久激情瑜伽 | 色婷婷综合久久久中文一区二区| 6080日韩午夜伦伦午夜伦| 日本一区二区在线不卡| 日本欧美一区二区三区| 99国产精品一区| 精品成a人在线观看| 亚洲精选一二三| 国产麻豆视频一区| 欧美日韩精品综合在线| 欧美高清一级片在线观看| 免费一级片91| 色综合网站在线| 国产色综合一区| 日韩成人精品在线| 在线观看视频欧美| 欧美激情中文字幕| 精品一区二区三区欧美| 欧美浪妇xxxx高跟鞋交| 国产精品国产三级国产| 紧缚奴在线一区二区三区| 欧美日韩一区二区三区四区| 中文字幕一区二区三区精华液| 久久国产夜色精品鲁鲁99| 欧美日韩一区中文字幕| 亚洲人妖av一区二区| 国产福利91精品| 欧美成人欧美edvon| 日日摸夜夜添夜夜添亚洲女人| 91首页免费视频| 一区免费观看视频| 国产精品一二三四区| 日韩精品一区二区三区在线播放| 天堂成人免费av电影一区| 欧美最新大片在线看| 亚洲婷婷国产精品电影人久久| 成人国产精品免费观看| 日本一区二区视频在线观看| 国产成人在线视频网站| www久久精品| 国产一区二区在线免费观看| 日韩免费观看2025年上映的电影| 奇米影视7777精品一区二区| 欧美精品电影在线播放| 亚洲图片欧美色图| 在线观看日产精品| 亚洲第四色夜色| 欧美精品丝袜中出| 午夜影院在线观看欧美| 欧美日韩激情在线| 日韩中文字幕一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 亚洲已满18点击进入久久| 欧美午夜视频网站| 日韩激情一区二区| 欧美一卡二卡在线| 黄色资源网久久资源365| 精品欧美久久久| 国产乱淫av一区二区三区 | 亚洲日本成人在线观看| 91蜜桃网址入口| 一区二区三区在线免费| 91久久线看在观草草青青| 亚洲在线成人精品| 日韩欧美中文一区| 国内精品视频666| 国产精品久久久久影院亚瑟| 色哟哟一区二区在线观看| 亚洲超碰97人人做人人爱| 日韩免费视频线观看| 国产成人av电影免费在线观看| 亚洲天堂av老司机| 欧美高清精品3d| 国精产品一区一区三区mba视频| 国产精品美女www爽爽爽| 91免费观看在线| 日本中文字幕一区| 久久蜜桃av一区精品变态类天堂| 成a人片亚洲日本久久| 亚洲自拍欧美精品| 欧美电影免费观看高清完整版在| 国产精品影视在线观看| 亚洲精品网站在线观看| 欧美一级一区二区| 成人性视频免费网站| 亚洲国产成人tv| 久久久亚洲高清| 在线看日韩精品电影| 免费成人美女在线观看.| 国产精品久久久久久久久免费樱桃| 欧美艳星brazzers| 国产盗摄视频一区二区三区| 亚洲一区二区三区不卡国产欧美| 精品国内片67194| 91电影在线观看| 国产美女精品一区二区三区| 亚洲精选免费视频| 国产精品伦一区| 在线视频一区二区三区| 久久精品国产亚洲a| 亚洲女同一区二区| 337p日本欧洲亚洲大胆精品| 91丨九色丨蝌蚪丨老版| 久久丁香综合五月国产三级网站| 亚洲激情自拍视频| 久久网站热最新地址| 欧美日韩一本到| 99精品欧美一区二区三区小说 | 在线播放中文字幕一区| 成人黄色在线网站| 日本欧美肥老太交大片| 亚洲日本一区二区| 久久久久国产精品麻豆| 制服丝袜激情欧洲亚洲| 99国产精品久| 国产高清精品在线| 久久国产精品99久久久久久老狼| 亚洲成人黄色小说|