www.pudn.com > cguitest7.15.rar > Guilib.cpp
#include"stdafx.h" #include"guilib.h" #include#include #include #include //////////////////////////////////////////////////////////////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 size = 0; // gl_activeWinVec->head = NULL; // gl_activeWinVec->tail = NULL; } void freeOne(void* pointer){ if(pointer==NULL){ return; } int i; for(i=0; i 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 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 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 size){ CNode* p = NULL; int j = 0; for(j=0,p=self->head; j next); return p->pdata; } return NULL; } int getIndex(const void* pdata, CVector* self){ int i=0; void* ptemp = NULL; for(i=0; i 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 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 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 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){ 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, self->prec->y-self->font_y, self->caption ); textOut(self); (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC); } void append(char c, CText* self){ if(self->endPos>=TEXT_BUFF_SIZE){ //wait to add erro message }else{ int i=0; for(i=self->endPos; i>=self->curPos; i--){ self->text[i+1] = self->text[i]; } self->text[self->curPos] = c; self->curPos++; self->endPos++; } } void delet(CText* self){ if(self->endPos>0){ int i=0; for( i=self->curPos; i<=self->endPos; i++){ self->text[i-1] = self->text[i]; } self->curPos--; self->endPos--; } } void format(CText* self){ int ncperLine = (self->prec->w-DSP_GAP*2)/self->font_x; char* ptext = self->text; int i=0; int j=0; int k=0; int nCount = 0; char* pch = NULL; int nLineBgn = self->dspLnBgn; int nLineEnd = self->dspLnBgn+(self->prec->l-DSP_GAP*2)/self->font_y; // CNode* pnode0 = NULL; // CNode* pnode1 = NULL; CVector* pvec = self->pformatVec; clear(self->pformatVec); push_back(ptext, self->pformatVec); for(i=0; i<=self->endPos-1; i++,ptext++){ nCount++; if(nCount==ncperLine || *ptext==ENTER){ push_back(ptext+1, self->pformatVec); nCount = 0; } } push_back(self->text+self->endPos, self->pformatVec); if(nLineEnd>pvec->size-1){ nLineEnd = pvec->size-1; } for(j=0; j endPos; j++){ if(self->text+j==pvec->getByIndex(nLineBgn, pvec)){ self->dspChBgn = j; self->dspChEnd = j+i; break; } } i = self->dspChBgn; //for(j=0; j size-1; j++){ for(j=nLineBgn; j getByIndex(j, pvec); //pnode1 = pvec->getByIndex(j+1, pvec); k = 0; for(pch=(char*)pvec->getByIndex(j, pvec); pch getByIndex(j+1, pvec); pch++,i++,k++){ self->format_x[i] = self->prec->x+DSP_GAP + k*self->font_x; self->format_y[i] = self->prec->y+DSP_GAP + (j-nLineBgn)*self->font_y; } } } void textOut(CText* self){ format(self); CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC(); int i=0; for(i=self->dspChBgn; i dspChEnd; i++){ pDC->TextOut(self->format_x[i], self->format_y[i], self->text[i]); } (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC); } void paint(void* pobj){//, int wintype){ int i; int wintype = getPtrType(pobj); void* pdata = NULL; CVector* pvec = NULL; CWin* pwin = (CWin*)pobj; CButtn* pbtn = (CButtn*)pobj; CText* ptxt = (CText*)pobj; switch(wintype){ case CWIN: drawWin(pwin); pvec = pwin->pchild_vec; for(i=0; i size; i++){ pdata = pvec->getByIndex(i, pvec); paint(pdata);//, wintype); } break; case CBUTTN: drawButtn(pbtn); break; case CTEXT: drawText(ptxt); break; } } void show(CWin* pwin){ // CData* pdata = newCData(pwin, CWIN); void* pdata = NULL; paint(pwin);//, CWIN); int index = gl_activeWinVec->getIndex(pwin, gl_activeWinVec);//renew gl_activeWinVec if(index==-1){//not found, add directly gl_activeWinVec->push_back(pwin, gl_activeWinVec); }else if(index size){ // freeOne(pdata);//free temp variable pdata = gl_activeWinVec->getByIndex(index, gl_activeWinVec); gl_activeWinVec->eraseByIndex(index, gl_activeWinVec); gl_activeWinVec->push_back(pdata, gl_activeWinVec); } changeFocus(); } void OnShow(CMssg* pmssg){ void* pdata = pmssg->pdata; int nptrTp = getPtrType(pdata); if(nptrTp == CWIN){ CWin* pwin = (CWin*)pdata; show(pwin); } } void OnClose(CMssg* pmssg){ void* pdata = pmssg->pdata; int nptrTp = getPtrType(pdata); if(nptrTp == CWIN){ CWin* pwin = (CWin*)pdata; close(pwin); } } void close(CWin* pwin){ CNode* pnode = NULL; // void* pdata = NULL;//newCData(pwin, CWIN); void* pdata = NULL; gl_activeWinVec->eraseByKey(pwin, gl_activeWinVec); // eraseFocus();//for test paint(gl_desktop);//, CWIN); pnode = gl_activeWinVec->tail; if(pnode && pnode->pdata && pnode->pdata!=gl_desktop){ pdata = pnode->pdata; paint(pdata);//, pdata->wintype); } changeFocus(); // freeOne(pdata); } void OnKeyDown(CMssg* pmssg){ CText* text = NULL; if(getPtrType(pmssg->pdata)==CTEXT){ text = (CText*)pmssg->pdata; append(pmssg->lparam, text); if(text->parentWin){ show(text->parentWin); setFocus(pmssg->pdata); } } } void OnDbKeyDown(CMssg* pmssg){ CText* text = NULL; if(getPtrType(pmssg->pdata)==CTEXT){ text = (CText*)pmssg->pdata; delet(text); append(pmssg->lparam, text); if(text->parentWin){ show(text->parentWin); } } } void sendMessage(CMssg* pmssg){ if(pmssg){ push_back(pmssg, gl_mssgVec); } } CMssg* waitMessage(){ CMssg* ptemp = NULL; for(;;){ if(gl_mssgVec->size>0){ ptemp = (CMssg*)gl_mssgVec->head->pdata; eraseByKey(gl_mssgVec->head->pdata, gl_mssgVec); Sleep(100); return ptemp; } } return NULL; } int dispatchMessage(CMssg* pmssg){ CWin* pwin = NULL; CButtn* pbtn = NULL; CText* ptxt = NULL; int winType = TYPE_DEF; if(pmssg->type==WM_DESTROY1){ return 0; } if(pmssg->pdata){ //gl_focus = pmssg->pdata; winType = getPtrType(pmssg->pdata); switch(winType){ case CWIN: pwin = (CWin*)pmssg->pdata; if(pwin->winproc[pmssg->type] && pmssg->type!=WM_CHANGEFOCUS1 && gl_focus!=pwin->pExtra){ setFocus(pwin); } if(pwin->winproc[pmssg->type] ){ pwin->winproc[pmssg->type](pmssg); } break; case CBUTTN: pbtn = (CButtn*)pmssg->pdata; if(pbtn->winproc[pmssg->type] && pmssg->type!=WM_CHANGEFOCUS1 && gl_focus!=pbtn->pExtra){ setFocus(pbtn); } if(pbtn->winproc[pmssg->type]){ pbtn->winproc[pmssg->type](pmssg); } break; case CTEXT: ptxt = (CText*)pmssg->pdata; if(ptxt->winproc[pmssg->type] && pmssg->type!=WM_CHANGEFOCUS1 && gl_focus!=ptxt->pExtra){ setFocus(ptxt); } if(ptxt->winproc[pmssg->type]){ ptxt->winproc[pmssg->type](pmssg); } int tp = getPtrType(gl_focus->pdata);//for test break; }//switch } // freeOne(pmssg); return 1; } int enter_main_times = 0;//for test char buff[20]; //for test //////////////////////////////////////////////////////////////test//////////////////////////////////////////////////////// void main(){ // int a = 10; // int i; // char* caption=NULL; // CVector* pv = NULL; // CData* pda = NULL; // CButtn* pbtn = NULL; CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC(); enter_main_times++; char* str = itoa(enter_main_times, buff, 10); pDC->TextOut(500, 200, str); CRect1* wrect1 = newCRect(60, 60, 140, 200); CRect1* brect1 = newCRect(80, 80, 40, 20); CRect1* brect2 = newCRect(80, 120, 40, 20); CRect1* brect3 = newCRect(80, 160, 40, 20); CRect1* trect1 = newCRect(80, 160, 100, 80); CWin* win1 = newCWin(wrect1,"win1"); CButtn* butn1 = newCButtn(win1, brect1, "butn1"); //CButtn* butn2 = newCButtn(win1, brect2, "butn2"); //CButtn* butn3 = newCButtn(win1, brect3, "butn3"); CText* text2 = newCText(win1, trect1, "text2", 8, 16); CWin* win2 = newCWin(wrect1, "win2"); CButtn* butn4 = newCButtn(win2, brect2, "butn4"); CText* text1 = newCText(win2, trect1, "text1", 8, 16); CMssg* pmssg0 = NULL; iniGui(win2); append('1',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('<',text1); append('6',text1); append('7',text1); append('8',text1); /* append('9',text1); append('1',text1); append('1',text1); // append('0',text1); append('2',text1); append('2',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); // append('0',text1); append('2',text1); append('3',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); // append('0',text1); append('2',text1); append('4',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); append('<',text1); append('2',text1); append('5',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); append('<',text1); append('2',text1); append('6',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); // append('0',text1); append('2',text1); append('7',text1); append('2',text1); append('3',text1); append('4',text1); append('5',text1); append('6',text1); append('7',text1); append('8',text1); append('9',text1); append('1',text1); append('1',text1); append('<',text1); append('2',text1); append('<',text1);*/ // text1->curPos--; // append('2',text1); // delet(text1); // butn1->winproc[WM_CLICK1] = butn1_OnClick; // butn4->winproc[WM_CLICK1] = butn4_OnClick; //addComponent(win1, butn1, CBUTTN); //addComponent(win1, butn2, CBUTTN); //addComponent(win1, butn3, CBUTTN); text1->dspLnBgn = 0; // pv = win1->pchild_vec; // CDC *pDC = (AfxGetApp()->m_pMainWnd)->GetDC(); void* pdata = gl_activeWinVec->tail->pdata;//newCData(win1, CWIN); CMssg* pmssg = newCMssg(text2, WM_KEYDOWN1, 's', 0); //paint(pmssg); // OnChangeFocus(pmssg); // OnChangeFocus(pmssg); // OnDbKeyDown(pmssg); CMssg* pmssg1 = newCMssg(win1, WM_SHOW1, 0, 0); CMssg* pmssg2 = newCMssg(win1, WM_CHANGEFOCUS1, 0, 0); CMssg* pmssg3 = newCMssg(butn1, WM_CHANGEFOCUS1, '8', 0); CMssg* pmssg4 = newCMssg(text2, WM_CHANGEFOCUS1, 'w', 0); CMssg* pmssg6 = newCMssg(win1, WM_CLOSE1, 'w', 0); CMssg* pmssg7 = newCMssg(win2, WM_CLOSE1, 'w', 0); CMssg* pmssg8 = newCMssg(win2, WM_SHOW1, 'w', 0); CMssg* pmssg9 = newCMssg(text1, WM_KEYDOWN1, '5', 0); CMssg* pmssg10 = newCMssg(text1, WM_TRIKEYDOWN1, 'v', 0); CMssg* pmssg11 = newCMssg(butn4, WM_CLICK1, 'v', 0); CMssg* pmssg5 = newCMssg(text2, WM_DESTROY1, '9', 0); sendMessage(pmssg1); // OnChangeFocus(pmssg2); sendMessage(pmssg1); sendMessage(pmssg2); sendMessage(pmssg3); // OnKeyDown(pmssg3); // sendMessage(pmssg3); sendMessage(pmssg4); sendMessage(pmssg6); sendMessage(pmssg7); sendMessage(pmssg8); sendMessage(pmssg9); sendMessage(pmssg10); sendMessage(pmssg11); // sendMessage(pmssg5); sendMessage(pmssg5); // sendKeyMssg(nChar); // CMssg* pmssg5 = newCMssg(text1, WM_KEYDOWN1, 'w', 0); // OnKeyDown(pmssg1); // OnChangeFocus(pmssg); /* OnChangeFocus(pmssg); OnChangeFocus(pmssg); OnChangeFocus(pmssg); win1->winproc[WM_CHANGEFOCUS1](pmssg);*/ for(int j=0;j<1000;j++){ pmssg0 = waitMessage(); if(!dispatchMessage(pmssg0)){ break; } // freeOne(pmssg0); } int i = getPtrType(gl_focus->pdata);//for test //eraseFocus();//for test freeAll(); // enter_main_times--; // str = itoa(enter_main_times, buff, 10); // pDC->TextOut(500, 220, str); (AfxGetApp()->m_pMainWnd)->ReleaseDC(pDC); } //void sendKeyMssg(UINT nChar){ // CMssg* pmssg = newCMssg(gl_focus->pdata, WM_KEYDOWN1, nChar, 0); // sendMessage(pmssg); //} void OnButtnClick(CMssg* pmssg){ CButtn* butn = NULL; if(getPtrType(pmssg->pdata)==CBUTTN){ butn = (CButtn*)pmssg->pdata; close(butn->parentWin); } }