⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 absfram.h

📁 brew开发的日历程序 完全模仿mediaplayer的结构设计 值得初学者学习
💻 H
字号:
/**
 * File Name    : absfram.h                                                                 
 * Created      : 07/04/10                                                                       
 * Author       : ZhongNingLin@neusoft.com                                                                    
 * Model        : 05YOP                                                                           
 * Description  : [[CN]] 此文件的职责是: [[CN]]                           
**/
#ifndef _ABSFRAM_H
        #define _ABSFRAM_H

/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "AEEModGen.h"          // Module interface definitions
#include "AEEAppGen.h"          // Applet interface definitions
#include "AEEShell.h"           // Shell interface definitions
#include "AEEFile.h"			// File interface definitions
#include "AEEDB.h"				// Database interface definitions
#include "AEEstdlib.h"
#include "AEE.h"
#include "AEEDate.h"
#include "AEETime.h"
#include "AEEText.h"
#include "Schedule.bid"
#include "schedule.brh"

/*INTERFACE DEFINITION*/
typedef struct _IWindow  IWindow;
QINTERFACE(IWindow)
{
   /*Enables/Disables the window. Window controls will not process*/
   /*events if the window is disabled.*/
   void     (*Enable)(IWindow * po, boolean bEnable);

   /*Redraws the window if enabled*/
   void     (*Redraw)(IWindow * po);

   /*Handles the events routed to the window*/
   boolean  (*HandleEvent)(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam);

   /*Releases the window resources*/
   void     (*Delete)(IWindow * po);
};

#define IWINDOW_Enable(p)                 GET_PVTBL(p, IWindow)->Enable(p, TRUE)
#define IWINDOW_Disable(p)                GET_PVTBL(p, IWindow)->Enable(p, FALSE)
#define IWINDOW_Redraw(p)                 GET_PVTBL(p, IWindow)->Redraw(p)
#define IWINDOW_HandleEvent(p, e, w, dw)  GET_PVTBL(p, IWindow)->HandleEvent(p, e, w, dw)
#define IWINDOW_Delete(p)                 GET_PVTBL(p, IWindow)->Delete(p)



/*===============================================================================
                     MACROS
=============================================================================== */
#define SH_IWINDOW_SETVTBL(pVtbl, pfnEn, pfnRd, pfnHE, pfnDel) \
   (pVtbl)->Enable      = (pfnEn); \
   (pVtbl)->Redraw      = (pfnRd); \
   (pVtbl)->HandleEvent = (pfnHE); \
   (pVtbl)->Delete      = (pfnDel)

#define SH_RELEASEIF(p)                SH_FreeIF((IBase **)&(p))
#define SH_RELEASEWIN(p)               SH_FreeWin((IWindow **)&(p))
#define SH_WINERR_RETURN(p)            { SH_RELEASEWIN(p); return NULL; }

#define SH_ISPLUGIN(p)                 ((p)->m_pOwner->m_bPlugin)

#define SH_DRAWHEADER(pme)             SH_DrawImage((pme)->m_pOwner->m_pHdrImage, &(pme)->m_pOwner->m_rectHdr, TRUE)

#define SH_ISEVTKEY(e)                 ((e) == EVT_KEY)
#define SH_ISCLR(e)                    (SH_ISEVTKEY(e) && wParam == AVK_CLR)
#define SH_ISEVTCMD(e)                 ((e) == EVT_COMMAND)
#define SH_ISCMD(e, c)                 (SH_ISEVTCMD(e) && (c) == wParam)
#define SH_ISFULLSCRN(p)               ((p)->m_bImage && (p)->m_bFullScreen)

#define Schedule_CancelRedraw(p)   { CALLBACK_Cancel(&(p)->m_cbRedraw); (p)->m_bRedraw = FALSE; }
#define Schedule_DisableWin(p)     { IWINDOW_Disable((p)->m_pWin); Schedule_CancelRedraw(p); }

/*===========================================================================
                      PUBLIC DATA DECLARATIONS
===========================================================================*/

/*-------------------------------------------------------------------
            Defines
-------------------------------------------------------------------*/
#define MP_SPLASH_TIMER       750

#define MP_MAX_STRLEN         64
#define MP_MAX_FILES          32
#define MP_MEDIA_DIR          "media"
#define MP_QCP_REC_FILE       "sample.qcp"
#define MP_EXT_SEPARATOR      ", "

#define MP_VOLUME_STEP        25
#define MP_SEEK_TIME          10000    // 10 seconds
#define MP_PROG_TIMER         2000

#define MP_HEADER_CY          16 
#define MP_ICONVIEWCTL_CY     20

#define MP_PROGBAR_DX_DIV     3     // dx is dx/3 of main rectangle
#define MP_PROGBAR_DY_DIV     2     // dy is dy/2 of main rectangle
#define MP_PROGBAR_DX_OFFSET  4     // dx is reduced by offset
#define MP_CLR_PROG_FILL      MAKE_RGB(0, 128, 192)

#define EVT_CREATEMEDIA       EVT_USER
#define EVT_CREATEMEDIA_QCP   EVT_USER + 1

// Based on Menu style sheet:
#define MENU8_FT                  AEE_FT_NONE
#define MENU8_SELECT_FT           AEE_FT_RAISED
#define MENU8_RO                  AEE_RO_TRANSPARENT
#define MENU8_SELECT_RO           AEE_RO_TRANSPARENT
#define MENU8_COLOR_MASK 	      (MC_BACK | MC_SEL_BACK | MC_SEL_TEXT)
#define MENU8_BACKGROUND	      MAKE_RGB(255,255,204)
#define MENU8_SELECT_BACKGROUND	  MAKE_RGB(153, 204, 204)
#define RECT_BACKGROUND           MAKE_RGB(153, 204, 204)
#define MENU8_SELECT_TEXT	      RGB_BLACK

#define TB8_BACKGROUND	          MAKE_RGB(192,192,192)
#define TB8_SELECT_BACKGROUND	  MAKE_RGB(192, 192, 192)

/*-------------------------------------------------------------------
            Type Declarations
-------------------------------------------------------------------*/
/*窗口的类型*/
typedef enum _WinTypeType
{
	APP_NONE,
	APP_MAIN_WIN,            //主窗口   used
	APP_DATESEL_WIN,        //选择日期窗口 used
	APP_WEEKDATEDISP_WIN,    //星期窗口 used
	APP_STATE_ONEDAYDISP,    //一日事件窗口 used
	APP_STATE_MENUDISP,      //目录窗口 used date select /event view /event creat
	APP_STATE_EVTTYPE,       //事件类型目录窗口calandar /memo /other
	APP_STATE_CREATEVT,      //create event used
	APP_STATE_EVTLIST        //事件列表窗口
}WinType;


/*程序事件状态*/
typedef enum _AppStateType
{
	APP_STATE_MAIN,          //主窗口
	APP_STATE_DATEDISP
}AppStateType;

typedef struct Schedule       Schedule;
/*扩展接口的宏*/
#define INHERIT_CWindow(iname) \
   DECLARE_VTBL(iname) \
   Schedule * m_pOwner; \
   IShell *       m_pIShell; \
   IDisplay *     m_pIDisplay; \
   flg            m_bActive:1

/*定义一个抽象窗口*/
typedef struct CWindow
{
   INHERIT_CWindow(IWindow);
}CWindow;

IWindow * CWindow_New(int16 nSize, Schedule * pOwner, VTBL(IWindow) * pvt);
boolean   CWindow_ProcessEnable(IWindow * po, boolean bEnable);
void      SH_FreeIF(IBase ** ppif);
void      SH_FreeWin(IWindow ** ppif);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -