硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4453|回复: 2
收起左侧

[emWin] 关于emwin回调函数形参 与实参的疑问

[复制链接]

5

主题

26

回帖

15

积分

新手上路

积分
15
发表于 2015-3-3 16:39:33 | 显示全部楼层 |阅读模式
在emwin编程中我们会大量用到回调函数,例如:void _cbCallback ( WM_MESSAGE *pMsg ),目前我有一个疑问没有搞清楚:

在如上所示的函数中会用到 *pMsg这个入口参数,但pMsg只是一个函数的形参数,按理说应该在某个地方需要将此形参指向明确的实参,可是找遍整个程序也没有发现实参在什么地方,调用此回调函数的地方也只是填写了该函数的名称,并没有任何参数,如:GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0),这个*pMsg 到底是在哪里被初始化的呢?

下面是完整的代码:

/*
******************************************************************
**                      uCGUIBuilder                            **
**                  Version:   4.0.0.0                          **
**                     2012 / 04                               **
**                   CpoyRight to: wyl                          **
**              Email:ucguibuilder@163.com                        **
**          This text was Created by uCGUIBuilder               **
******************************************************************/

#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"

#include "WM.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "DROPDOWN.h"
#include "EDIT.h"
#include "FRAMEWIN.h"
#include "LISTBOX.h"
#include "MULTIEDIT.h"
#include "RADIO.h"
#include "SLIDER.h"
#include "TEXT.h"
#include &quotROGBAR.h"
#include "SCROLLBAR.h"
#include "LISTVIEW.h"

#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"

#include "WM.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "DROPDOWN.h"
#include "EDIT.h"
#include "FRAMEWIN.h"
#include "LISTBOX.h"
#include "MULTIEDIT.h"
#include "RADIO.h"
#include "SLIDER.h"
#include "TEXT.h"
#include &quotROGBAR.h"
#include "SCROLLBAR.h"
#include "LISTVIEW.h"

/*********************************************************************
*
*       static data
*
**********************************************************************
*/
static const char * _lvTable_00[4] = { "item1", "tttt", "yyy", "uuu" };
static const char * _lvTable_01[1] = { "item2" };
static const char * _lvTable_02[1] = { "item3" };
static const char * _lvTable_03[1] = { "item4" };


/*********************************************************************
*
*       Dialog resource
*
* This table conatins the info required to create the dialog.
* It has been created by ucGUIbuilder.
*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    { FRAMEWIN_CreateIndirect, "  Caption", 0, 0, 0, 800, 480, FRAMEWIN_CF_MOVEABLE, 0 },
    { BUTTON_CreateIndirect, "BUTTON0", GUI_ID_BUTTON0, 41, 36, 158, 56, 0, 0 },
    { CHECKBOX_CreateIndirect, "CHECKBOX0", GUI_ID_CHECK0, 41, 122, 187, 21, 0, 0 },
    { DROPDOWN_CreateIndirect, NULL, GUI_ID_DROPDOWN0, 37, 166, 285, 120, 0, 0 },
    { LISTVIEW_CreateIndirect, NULL, GUI_ID_LISTVIEW0, 37, 311, 321, 84, 0, 0 },
    { PROGBAR_CreateIndirect, NULL, GUI_ID_PROGBAR0, 237, 36, 185, 55, 0, 0 },
    { RADIO_CreateIndirect, NULL, GUI_ID_RADIO0, 351, 154, 101, 87, 0, 4 },
    { SCROLLBAR_CreateIndirect, NULL, GUI_ID_SCROLLBAR0, 454, 291, 210, 51, 0, 0 },
    { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 479, 36, 186, 54, 0, 0 },
    { TEXT_CreateIndirect, "TEXT0", GUI_ID_TEXT0, 476, 135, 188, 58, 0, 0 }
};



/*****************************************************************
**      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**
**      call this function in _cbCallback --> WM_PAINT
*****************************************************************/

void PaintDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

}



/*****************************************************************
**      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**
**      call this function in _cbCallback --> WM_INIT_DIALOG
*****************************************************************/

void InitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //
    //FRAMEWIN
    //
    FRAMEWIN_SetClientColor(hWin, 0xa9a9a9);
    FRAMEWIN_SetFont(hWin, &GUI_Font16B_ASCII);
    FRAMEWIN_SetTextAlign(hWin, GUI_TA_VCENTER | GUI_TA_LEFT);
    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
    FRAMEWIN_SetTitleHeight(hWin, 24);
    //
    //GUI_ID_CHECK0
    //
    CHECKBOX_SetFont(WM_GetDialogItem(hWin, GUI_ID_CHECK0), &GUI_Font16_ASCII);
    CHECKBOX_SetText(WM_GetDialogItem(hWin, GUI_ID_CHECK0), "CHECKBOX0");
    CHECKBOX_SetTextAlign(WM_GetDialogItem(hWin, GUI_ID_CHECK0), GUI_TA_TOP | GUI_TA_LEFT);
    //
    //GUI_ID_DROPDOWN0
    //
    DROPDOWN_SetTextHeight(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), 18);
    DROPDOWN_SetTextAlign(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), GUI_TA_VCENTER | GUI_TA_LEFT);
    DROPDOWN_SetFont(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), &GUI_Font16_ASCII);
    DROPDOWN_SetAutoScroll(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), 1);
    DROPDOWN_AddString(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), "list1");
    DROPDOWN_AddString(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), "list2");
    DROPDOWN_AddString(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), "list3");
    DROPDOWN_AddString(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), "list4");
    DROPDOWN_SetSel(WM_GetDialogItem(hWin, GUI_ID_DROPDOWN0), 0);
    //
    //GUI_ID_PROGBAR0
    //
    PROGBAR_SetText(WM_GetDialogItem(hWin, GUI_ID_PROGBAR0), "");
    PROGBAR_SetValue(WM_GetDialogItem(hWin, GUI_ID_PROGBAR0), 10);
    //
    //GUI_ID_LISTVIEW0
    //
    //LISTVIEW_SetAutoScrollH(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),1);
    //LISTVIEW_SetAutoScrollV(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),1);
    LISTVIEW_AddColumn(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), 60, "col1", GUI_TA_VCENTER | GUI_TA_LEFT);
    LISTVIEW_AddColumn(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), 60, "col2", GUI_TA_VCENTER | GUI_TA_LEFT);
    LISTVIEW_AddColumn(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), 60, "col3", GUI_TA_VCENTER | GUI_TA_LEFT);
    LISTVIEW_AddColumn(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), 60, "col4", GUI_TA_VCENTER | GUI_TA_LEFT);
    LISTVIEW_AddRow(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), _lvTable_00);
    LISTVIEW_AddRow(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), _lvTable_01);
    LISTVIEW_AddRow(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), _lvTable_02);
    LISTVIEW_AddRow(WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0), _lvTable_03);
    //
    //GUI_ID_RADIO0
    //
    RADIO_SetBkColor(WM_GetDialogItem(hWin, GUI_ID_RADIO0), 0xa9a9a9);
    RADIO_SetFont(WM_GetDialogItem(hWin, GUI_ID_RADIO0), &GUI_Font16_ASCII);
    RADIO_SetGroupId(WM_GetDialogItem(hWin, GUI_ID_RADIO0), 0);
    RADIO_SetText(WM_GetDialogItem(hWin, GUI_ID_RADIO0), "item1", 0);
    RADIO_SetText(WM_GetDialogItem(hWin, GUI_ID_RADIO0), "item2", 1);
    RADIO_SetText(WM_GetDialogItem(hWin, GUI_ID_RADIO0), "item3", 2);
    RADIO_SetText(WM_GetDialogItem(hWin, GUI_ID_RADIO0), "item4", 3);
    //
    //GUI_ID_SCROLLBAR0
    //
    SCROLLBAR_SetValue(WM_GetDialogItem(hWin, GUI_ID_SCROLLBAR0), 50);

}



/*********************************************************************
*
*       Dialog callback routine
*/
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;
    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;
    case WM_NOTIFY_PARENT:
        Id = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch (Id)
        {
        case GUI_ID_OK:
            if (NCode == WM_NOTIFICATION_RELEASED)
                GUI_EndDialog(hWin, 0);
            break;
        case GUI_ID_CANCEL:
            if (NCode == WM_NOTIFICATION_RELEASED)
                GUI_EndDialog(hWin, 0);
            break;
        case GUI_ID_BUTTON0:
            switch (NCode)
            {
            case WM_NOTIFICATION_CLICKED:
                //OnButtonClicked(pMsg);
                break;
            case WM_NOTIFICATION_RELEASED:
                //OnButtonReleased(pMsg);
                break;
            }
            break;
        case GUI_ID_RADIO0:
            switch (NCode)
            {
            case WM_NOTIFICATION_CLICKED:
                //OnRadioButtonClicked(pMsg);
                break;
            }
            break;

        }
        break;
    default:
        WM_DefaultProc(pMsg);
    }
}


/*********************************************************************
*
*       MainTask
*
**********************************************************************
*/
void CreateWindow(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 */
    PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
    //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
    CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
    DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
    SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
    SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
    HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
    RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
    GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);

}

// USER START (Optionally insert additional public code)
// USER END

/*************************** End of file ****************************/
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2015-3-3 22:21:22 | 显示全部楼层
可以下载UCGUI3.98的源码看看,这些都封装起来了。
论坛里面有UCGUI3.98的源码,你可以检索下。
回复

使用道具 举报

5

主题

26

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2015-3-4 09:13:45 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以下载UCGUI3.98的源码看看,这些都封装起来了。
论坛里面有UCGUI3.98的源码,你可以检索下。 (2015-03-03 22:21)
OK,我再继续研究一下,非常感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 09:35 , Processed in 0.149812 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表