>_<" 这里主要是窗口小工具Framewin的用法介绍,包括创建背景窗口及其消息回调函数,创建Frame窗口并设置其回调函数,这里一些其他的功能被我注释掉了,有向状态栏添加最大最小按钮的操作,改变标题文本相关设置,设置标题可见性等~注意这里GUI_Delay();很重要,否则会黑屏~
1 #include <stddef.h> 2 #include <string.h> 3 #include "GUI.h" 4 #include "FRAMEWIN.h" 5 6 #define SPEED 1200 7 #define MSG_CHANGE_MAIN_TEXT (WM_USER + 0) 8 9 static FRAMEWIN_Handle _hFrame; 10 static WM_CALLBACK* _pcbOldFrame; 11 static char _acMainText[100]; 12 static int _LockClose = 1; 13 14 15 //Frame窗口消息回调函数 16 static void _cbFrame(WM_MESSAGE * pMsg) { 17 switch (pMsg->MsgId) { 18 case WM_NOTIFY_PARENT: 19 if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) { 20 int Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ 21 if (Id == GUI_ID_CLOSE) { 22 if (_LockClose) { 23 return; 24 } 25 _hFrame = 0; 26 } 27 } 28 break; 29 } 30 if (_pcbOldFrame) { 31 (*_pcbOldFrame)(pMsg); 32 } 33 } 34 35 //背景窗口回调函数 36 static void _cbBkWindow(WM_MESSAGE * pMsg) { 37 switch (pMsg->MsgId) { 38 case MSG_CHANGE_MAIN_TEXT: 39 strcpy(_acMainText, pMsg->Data.p); 40 WM_InvalidateWindow(pMsg->hWin); 41 break; 42 case WM_PAINT: 43 GUI_SetBkColor(GUI_BLACK); 44 GUI_Clear(); 45 GUI_SetColor(GUI_WHITE); 46 GUI_SetFont(&GUI_Font24_ASCII); 47 GUI_DispStringHCenterAt("WIDGET_FrameWin - Sample", 160, 5); 48 GUI_SetFont(&GUI_Font8x16); 49 GUI_DispStringHCenterAt(_acMainText, 160, 40); 50 GUI_SetFont(&GUI_Font6x8); 51 GUI_DispStringHCenterAt("The function FRAMEWIN_Create creates both the\n" 52 "frame window and the client window.", 160, 190); 53 break; 54 default: 55 WM_DefaultProc(pMsg); 56 } 57 } 58 59 static void _DemoFramewin(void) { 60 int i; 61 WM_HWIN hChild; 62 /* Set callback for background window */ 63 WM_SetCallback(WM_HBKWIN, _cbBkWindow); //背景窗口消息回调函数 64 _hFrame = FRAMEWIN_Create("Frame window", 0, WM_CF_SHOW, 50, 75, 220, 100); 65 /* Set callback for frame window */ 66 _pcbOldFrame = WM_SetCallback(_hFrame, _cbFrame); 67 // /* Set moveable */ 68 FRAMEWIN_SetMoveable(_hFrame, 1); 69 // /*给窗口加入几个最大最小化按钮 */ 70 // FRAMEWIN_AddCloseButton(_hFrame, 0, 0); 71 // FRAMEWIN_AddMaxButton(_hFrame, FRAMEWIN_BUTTON_RIGHT, 0); 72 // FRAMEWIN_AddMinButton(_hFrame, FRAMEWIN_BUTTON_RIGHT, 2); 73 /* Modify frame window attributes */ 74 FRAMEWIN_SetActive(_hFrame, 1); 75 // FRAMEWIN_SetFont(_hFrame, &GUI_Font16B_ASCII); 76 // FRAMEWIN_SetTitleHeight(_hFrame, 20); 77 // 78 // FRAMEWIN_SetTextColor(_hFrame, GUI_YELLOW); 79 // FRAMEWIN_SetTextAlign(_hFrame, GUI_TA_HCENTER); 80 // FRAMEWIN_Minimize(_hFrame); 81 // FRAMEWIN_Maximize(_hFrame); 82 // FRAMEWIN_Restore(_hFrame); 83 // for (i = 0; i < 5; i++) { 84 // FRAMEWIN_SetTitleVis(_hFrame, 0); 85 // GUI_Delay(200); 86 // FRAMEWIN_SetTitleVis(_hFrame, 1); 87 // GUI_Delay(200); 88 // } 89 // /* Time to play with frame window */ 90 while(1){ 91 GUI_Delay(200000000); 92 } 93 // _LockClose = 0; 94 // if (_hFrame) { 95 // FRAMEWIN_Delete(_hFrame); 96 // } 97 } 98 99 void test(void) { 100 GUI_Init(); 101 WM_EnableMemdev(WM_HBKWIN); 102 _DemoFramewin(); 103 }