其中 c 目录中就一个文件mmishopping_chess_wintab.c,其中部分代码如下(对外接口是函数MMISHOPPING_OpenChessWin):
LOCAL MMI_RESULT_E HandleShoppingChessWin(
MMI_WIN_ID_T win_id,
MMI_MESSAGE_ID_E msg_id,
DPARAM param);
WINDOW_TABLE( MAINMENU_SHOPPING_CHESS_WIN_TAB ) =
{
WIN_FUNC( (uint32)HandleShoppingChessWin ),
WIN_ID( MMISHOPPING_CHESS_WIN_ID ),
END_WIN
};
PUBLIC BOOLEAN MMISHOPPING_OpenChessWin(void)
{
return (MMK_CreateWin((uint32*)MAINMENU_SHOPPING_CHESS_WIN_TAB,PNULL));
}
LOCAL MMI_RESULT_E HandleShoppingChessWin(
MMI_WIN_ID_T win_id,
MMI_MESSAGE_ID_E msg_id,
DPARAM param
)
{
LOCAL GUI_POINT_T point[8] = {0};
MMI_RESULT_E recode = MMI_RESULT_TRUE;
GUI_LCD_DEV_INFO lcd_dev_info = {GUI_MAIN_LCD_ID,GUI_BLOCK_MAIN};
GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect();
LOCAL BOOLEAN is_first_move = FALSE;
switch(msg_id)
{
case MSG_OPEN_WINDOW:
//CreateShoppingChesswinLayer(&Shopping_Chesswin_Bg_Layer,TRUE,TRUE);
//CreateShoppingChesswinLayer(&Shopping_Chesswin_Fg_Layer,FALSE,FALSE);
//CreateShoppingChesswinLayer(&Shopping_Chesswin_TpMove_Layer,FALSE,FALSE);
Shopping_Chesswin_Bg_Layer = CreateShoppingChesswinBgLayer();
Shopping_Chesswin_Fg_Layer = CreateShoppingChesswinFgLayer();
Shopping_Chesswin_TpMove_Layer = CreateShoppingChesswinTpMoveLayer();
ShoppingChesswinAppendLayer(&Shopping_Chesswin_Bg_Layer,UILAYER_LEVEL_NORMAL);
ShoppingChesswinAppendLayer(&Shopping_Chesswin_Fg_Layer,UILAYER_LEVEL_NORMAL);
ShoppingChesswinAppendLayer(&Shopping_Chesswin_TpMove_Layer,UILAYER_LEVEL_NORMAL);
UILAYER_BltLayerToLayer(&lcd_dev_info,&Shopping_Chesswin_Bg_Layer,&full_rect,TRUE);
UILAYER_BltLayerToLayer(&lcd_dev_info,&Shopping_Chesswin_Fg_Layer,&full_rect,TRUE);
UILAYER_BltLayerToLayer(&lcd_dev_info,&Shopping_Chesswin_TpMove_Layer,&full_rect,TRUE);
DisplayShoppingChesswinBgLayer();
ShoppingChessEveluationInit();
ShoppingChesswinInit(win_id);
//人开局走棋
ShoppingChessDisplayInfo(TXT_MAN_GO_NOW);
break;
case MSG_TP_PRESS_DOWN:
HandleShoppingChessTpDownMSG(win_id,param);
is_first_move = TRUE; //此参数用来清掉move时选中处的显示区域
break;
case MSG_TP_PRESS_MOVE:
HandleShoppingChessTpMoveMSG(win_id,param,is_first_move);
is_first_move = FALSE;
break;
case MSG_TP_PRESS_UP:
HandleShoppingChessTpUpMSG(win_id,param);
if(is_man_go_done)
{
is_man_go_done = FALSE;
if(ShoppingChessWhoIsWin(&Chessman.m_ChessBoard) == MAN_WIN)
{
ShoppingChessDisplayInfo(TXT_MAN_WIN);
}
else
{
//对话框显示"现在计算机在走"
ShoppingChessDisplayInfo(TXT_COM_GO_NOW);
MMK_PostMsg(win_id,SHOPPING_CHESS_COM_MOVE_MSG,PNULL,PNULL);
}
}
break;
case SHOPPING_CHESS_MAN_MOVE_MSG:
//对话框显示"现在该你走"
if(ShoppingChessWhoIsWin(&Chessman.m_ChessBoard) == COM_WIN)
{
ShoppingChessDisplayInfo(TXT_MAN_LOSE);
}
else
{
ShoppingChessDisplayInfo(TXT_MAN_GO_NOW);
}
break;
case SHOPPING_CHESS_COM_MOVE_MSG:
//这里计算机走子;需考虑算法等......
ShoppingChessSearchAGoodMove(&Chessman.m_ChessBoard);
RefreshShoppingChesswinFgLayer(win_id);
MMK_PostMsg(win_id,SHOPPING_CHESS_MAN_MOVE_MSG,PNULL,PNULL);
break;
case MSG_GET_FOCUS:
ShoppingChesswinAppendLayer(&Shopping_Chesswin_Fg_Layer,UILAYER_LEVEL_NORMAL);
ShoppingChesswinAppendLayer(&Shopping_Chesswin_TpMove_Layer,UILAYER_LEVEL_NORMAL);
UILAYER_BltLayerToLayer(&lcd_dev_info,&Shopping_Chesswin_Fg_Layer,&full_rect,TRUE);
UILAYER_BltLayerToLayer(&lcd_dev_info,&Shopping_Chesswin_TpMove_Layer,&full_rect,TRUE);
RefreshShoppingChesswinFgLayer(win_id);
break;
case MSG_CTL_PENOK:
case MSG_CTL_MIDSK:
case MSG_APP_WEB:
case MSG_CTL_OK:
case MSG_APP_OK:
break;
case MSG_TIMER:
break;
case MSG_APP_CANCEL:
case MSG_CTL_CANCEL:
MMK_CloseWin(win_id);
break;
default:
recode = MMI_RESULT_FALSE;
break;
}
return recode;
}
这里就不贴源码了 需要的同学可以留言留下邮箱我把整个文件打包发给大家