ucgui 如何在WM视窗里创建按钮

ucgui 如何在WM视窗里创建按钮,第1张

我大体明白你的意思,你要在一个窗口里面创建按钮,而不是在桌面上创建。窗口叫Frame,按钮叫Button,而带有其他控件的窗口(Frame)其实叫做对话框(Dialog)。

创建一个对话框的过程:

1.声明对话框资源

2.设定回调函数

3.创建对话框

举例如下:

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =

{

{ FRAMEWIN_CreateIndirect, "APE Solar", my_MAIN_FRAME, 0,0, 240, 320, WM_CF_SHOW, 1},

{ BUTTON_CreateIndirect, "TOOLS", MY_ID_TOOLS,10, 270, 90, 30},

{ BUTTON_CreateIndirect, "CONFIG", MY_ID_CONFIG, 10, 230, 90, 30},

{ BUTTON_CreateIndirect, "SEND",MY_ID_SEND, 120, 230, 110, 70},

{ TEXT_CreateIndirect, "LText", MY_ID_TEXT1,20, 60, 48, 15, 0},

{ TEXT_CreateIndirect, "LText", MY_ID_TEXT2,20, 80, 55, 15, 0},

{ TEXT_CreateIndirect, "LText", MY_ID_TEXT3,20, 100, 65, 15, 0},

{ TEXT_CreateIndirect, "LText", MY_ID_TEXT4,20, 120, 48, 15, 0},

{ TEXT_CreateIndirect, "LText", MY_ID_TEXT5,20, 140, 55, 15, 0},

}

static void cb_ShowMainMenu(WM_MESSAGE* pMsg)

{

switch (pMsg->MsgId)

{

case WM_PAINT:

GUI_Clear()

break

default:

WM_DefaultProc(pMsg)

}

}

void ShowMainMenu(void)

{

GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &cb_ShowMainMenu, 0, 0, 0)

GUI_Delay(1000)

}

#include <stddef.h>

#include "GUI.h"

#include "DIALOG.h"

#include "WM.h"

#include "BUTTON.h"

#include "FRAMEWIN.h"

/*主界面的资源链表*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

    { FRAMEWIN_CreateIndirect,  "Caption",           0,                       0,  0,  320,240,FRAMEWIN_CF_MOVEABLE,0},

    { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          84, 55, 134,56, 0,0}

}

/*按钮按下之后的资源链表*/

static const GUI_WIDGET_CREATE_INFO _aButtonCreate[] = {

    { FRAMEWIN_CreateIndirect,  "Caption",           0,                       0,  0,  320,240,FRAMEWIN_CF_MOVEABLE,0},

}

/*主界面的绘制函数*/

void PaintDialog(WM_MESSAGE * pMsg)

{

    WM_HWIN hWin = pMsg->hWin

}

/*主界面的初始化函数,初始化标题栏的最大化,最小化,关闭按钮*/

void InitDialog(WM_MESSAGE * pMsg)

{

    WM_HWIN hWin = pMsg->hWin

    //

    //FRAMEWIN

    //

    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0)

    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1)

    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2)

}

/*按钮d出界面的回调函数*/

static void _cbButtonCallback(WM_MESSAGE * pMsg) 

{

    WM_HWIN hWin = pMsg->hWin

    switch (pMsg->MsgId) 

    {

case WM_INIT_DIALOG:

            InitDialog(pMsg)

            break

        default:

            WM_DefaultProc(pMsg)

    }

}

/*主界面的回调函数*/

static void _cbCallback(WM_MESSAGE * pMsg) 

{

    int NCode, Id

    WM_HWIN hWin = pMsg->hWin

    switch (pMsg->MsgId) 

    {

        case WM_PAINT://绘制界面

            PaintDialog(pMsg)

            break

        case WM_INIT_DIALOG://初始化界面

            InitDialog(pMsg)

            break

#if 0

//这个是接收键盘上的按键的相应

        case WM_KEY:

            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) 

            {

                case GUI_KEY_ESCAPE:

                    GUI_EndDialog(hWin, 1)

                    break

                case GUI_KEY_ENTER:

                    GUI_EndDialog(hWin, 0)

                    break

            }

            break

#endif

        case WM_NOTIFY_PARENT:

            Id = WM_GetId(pMsg->hWinSrc) 

            NCode = pMsg->Data.v        

            switch (Id) 

            {

                case GUI_ID_BUTTON0:

                    if(NCode==WM_NOTIFICATION_RELEASED)

{

                       GUI_ExecDialogBox(_aButtonCreate, GUI_COUNTOF(_aButtonCreate), &_cbButtonCallback, 0, 0, 0)

                    }

break           

            }

            break

        default:

            WM_DefaultProc(pMsg)

    }

}

/*********************************************************************

*

*       MainTask

*

**********************************************************************

*/

void MainTask(void) 

    GUI_Init()

    WM_SetDesktopColor(GUI_WHITE)      /* Automacally update desktop window */

    WM_SetCreateFlags(WM_CF_MEMDEV)  /* Use memory devices on all windows to avoid flicker */

while(1)

{

        GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0)

}

}

关于界面的创建可以用ucguibuilder来创建,它会自动生成代码;然后自己根据所需修改即可。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11617810.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存