|
在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 "ROGBAR.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 "ROGBAR.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 ****************************/ |
|