//----------------------------------------------------------------------------- //功能: 显示断言信息,然后退出程序 //参数: file,出错处的文件名 // line,出错的行号,即调用assert宏的行号。 //输出: 无 //返回: 无 //------------ //更新记录: // 1.日期: 2014/12/10 // 说明: 创建 // 作者: 罗侍田 //----------------------------------------------------------------------------- void __assert(const char *file, s32 line) { u16 event_id; printk("assertion failed: file \"%s\", line %d\r\n",file, line); printk("entery endless loop,try shell\r\n"); event_id=Djy_MyEventId(); Djy_SetEventPrio(event_id,CN_PRIO_SYS_SERVICE+1); for(;;); }
//----创始桌面窗口-------------------------------------------------------------- //描述: 该函数为内部调用,仅限于创建桌面. //参数:proc: 桌面窗口过程回调函数 // Text: 桌面窗口文字指针 // x,y,w,h: 桌面窗口位置和大小 // pdata: 用户自定义附加数据. //返回:桌面窗口句柄. //------------------------------------------------------------------------------ HWND CreateDesktop( WNDPROC *proc, const char *Text, int x,int y,int w,int h, const void *pdata) { WINDOW *pwin=NULL; struct tagGkWinRsc *pGkWin=NULL; u32 Style; if(NULL!=proc) { pwin =WIN_Alloc(); if(NULL!=pwin) { Style = 0; Style &=~(WS_CHILD); _InitWindow(pwin,proc,Text,Style,x,y,w,h,NULL,0); pGkWin =(struct tagGkWinRsc*)malloc(sizeof(struct tagGkWinRsc)); if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin, x,y,x+w,y+h, RGB(0,0,0), CN_WINBUF_BUF, "desktop", CN_SYS_PF_DISPLAY, 0,0,0)) { free(pGkWin); return FALSE; } pwin->pGkWin =pGkWin; pwin->mutex_lock =Lock_MutexCreate(NULL); pwin->pMsgQ =GUI_CreateMsgQ(32); pwin->EventID =Djy_MyEventId(); pwin->Zorder =0; GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS); HWND_Desktop =pwin; SendMessage(pwin,MSG_CREATE,(u32)pdata,0); } } return pwin; }
//----创建窗口------------------------------------------------------------------ //描述: 该函数可以创建主窗口和子窗口(控件) //参数:proc: 窗口过程回调函数 // Text: 窗口文字指针 // Style: 窗口风格(具体参考窗口风格组合说明) // x,y,w,h: 桌面窗口位置和大小 // hParent: 父窗口句柄.如果是NULL,则默认桌面为父窗口. // WinId: 窗口Id.如果是主窗口,该参数被忽略. // pdata: 用户自定义附加数据. //返回:窗口句柄. //------------------------------------------------------------------------------ HWND CreateWindow(WNDPROC *pfWinProc, const char *Text,u32 Style, s32 x,s32 y,s32 w,s32 h, HWND hParent,u32 WinId,const void *pdata) { WINDOW *pwin=NULL; struct tagGkWinRsc *pGkWin=NULL; if(NULL==hParent) { hParent =GetDesktopWindow(); } if(HWND_Lock(hParent)) { pwin =WIN_Alloc(); if(NULL!=pwin) { //初始化窗口数据 _InitWindow(pwin,pfWinProc,Text,Style,x,y,w,h,hParent,WinId); x =pwin->WinRect.left; y =pwin->WinRect.top; w =RectW(&pwin->WinRect); h =RectH(&pwin->WinRect); pGkWin =(struct tagGkWinRsc*)malloc(sizeof(struct tagGkWinRsc)); if(Style&WS_CHILD) { if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin,x,y,x+w,y+h, RGB(0,0,0), CN_WINBUF_BUF, pwin->Name, CN_SYS_PF_DISPLAY, 0,0,0)) { free(pGkWin); return NULL; } pwin->mutex_lock =hParent->mutex_lock; //子窗口使用父窗口锁 pwin->pMsgQ =hParent->pMsgQ; //子窗口使用父窗口消息队列 pwin->EventID =hParent->EventID; pwin->Zorder =hParent->Zorder-1; GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS); } else { if(!GK_ApiCreateGkwin(pGkWinDesktop, pGkWin,x,y,x+w,y+h, RGB(0,0,0), CN_WINBUF_BUF, pwin->Name, CN_SYS_PF_DISPLAY, 0,0,0)) { free(pGkWin); return NULL; } pwin->mutex_lock =Lock_MutexCreate(NULL); pwin->pMsgQ =GUI_CreateMsgQ(32); pwin->EventID =Djy_MyEventId(); pwin->Zorder =hParent->Zorder-1; GK_ApiSetPrio(pGkWin,pwin->Zorder,100*mS); } pwin->pGkWin = pGkWin; //将新窗口添加到父窗口 _AddChild(hParent,pwin); } HWND_Unlock(hParent); if(NULL!=pwin) { SendMessage(pwin,MSG_CREATE,(u32)pdata,0); InvalidateWindow(pwin); } } return pwin; }