|
如上图,整体上是一个对话框,左边若干按钮,同时有若干个子对话框(初始状态都是隐藏的),每个按钮都对应一个子对话框,我希望点击某个按钮,会在中央区域显示出对应的子对话框(红框区域),同时其他的子对话框隐藏。
我是这样做的:
父对话框回调里面
/**************************************************************/
case WM_PAINT:
//GUI_Clear();
GUI_DrawGradientV(0,0,799,419,GUI_BLUE,GUI_DARKBLUE);
GUI_SetColor(0xeecd68);
GUI_FillRoundedRect(5,5,137,400,5);
GUI_SetColor(GUI_GREEN);
GUI_DrawRoundedRect(5,5,137,400,5);
GUI_SetColor(GUI_CYAN);
GUI_DrawRoundedRect(150,30,790,360,5);
switch(iH)
{
case 0: WM_HideWindow(hDialog[0]);
WM_InvalidateWindow(hWin);
break;
case 1: WM_HideWindow(hDialog[1]);
WM_InvalidateWindow(hWin);
break;
}
switch(iS)
{
case 0:
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON12),1);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON13),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON14),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON15),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON16),0);
WM_ShowWindow(hDialog[0]);
WM_InvalidateWindow(hWin);
break;
case 1:
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON12),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON13),1);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON14),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON15),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON16),0);
WM_ShowWindow(hDialog[1]);
WM_InvalidateWindow(hWin);
break;
case 2:
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON12),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON13),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON14),1);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON15),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON16),0);
break;
case 3:
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON12),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON13),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON14),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON15),1);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON16),0);
break;
case 4:
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON12),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON13),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON14),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON15),0);
BUTTON_SetPressed(WM_GetDialogItem(hWin,GUI_ID_BUTTON16),1);
break;
case 5:
break;
case 6:
break;
}
case WM_INIT_DIALOG:
hDialog[0]=GUI_CreateDialogBox(_admSetSB1Create, GUI_COUNTOF(_admSetSB1Create), NULL, hWin, 0, 0);
hDialog[1]=GUI_CreateDialogBox(_admSetSB2Create, GUI_COUNTOF(_admSetSB2Create), NULL, hWin, 0, 0);
hDialog[2]=GUI_CreateDialogBox(_admSetSB3Create, GUI_COUNTOF(_admSetSB3Create), NULL, hWin, 0, 0);
hDialog[3]=GUI_CreateDialogBox(_admSetSB4Create, GUI_COUNTOF(_admSetSB4Create), NULL, hWin, 0, 0);
hDialog[4]=GUI_CreateDialogBox(_admSetSB5Create, GUI_COUNTOF(_admSetSB5Create), NULL, hWin, 0, 0);
WM_SetHasTrans(hDialog[0]);
WM_SetCallback(hDialog[0],_cbAdmSetSB1);
WM_SendMessageNoPara(hDialog[0],WM_INIT_DIALOG);
WM_SetHasTrans(hDialog[1]);
WM_SetCallback(hDialog[1],_cbAdmSetSB2);
WM_SendMessageNoPara(hDialog[1],WM_INIT_DIALOG);
WM_SetHasTrans(hDialog[2]);
WM_SetCallback(hDialog[2],_cbAdmSetSB3);
WM_SendMessageNoPara(hDialog[2],WM_INIT_DIALOG);
WM_SetHasTrans(hDialog[3]);
WM_SetCallback(hDialog[3],_cbAdmSetSB4);
WM_SendMessageNoPara(hDialog[3],WM_INIT_DIALOG);
WM_SetHasTrans(hDialog[4]);
WM_SetCallback(hDialog[4],_cbAdmSetSB5);
WM_SendMessageNoPara(hDialog[4],WM_INIT_DIALOG);
WM_HideWindow(hDialog[0]);
WM_HideWindow(hDialog[1]);
WM_HideWindow(hDialog[2]);
WM_HideWindow(hDialog[3]);
WM_HideWindow(hDialog[4]);
break;
/*****************************************************/
我这样做后,发现点击下一个按钮后,中间显示区不刷新,依旧显示的是上一个按钮对应的子对话框。实际上是已经切换到对应的子对话框了,但是就是不刷新画面,我点击一下那列表框的小三角,才刷新一部分。我目前试了左边的最上边两个按钮,后面的还没做。
我反复尝试了发现有另外两个现象:
1、子对话框不设置回调函数,点击两个按钮可以很好的相互切换刷新,子对话框的背景是默认的灰白色;
2、去掉设置透明标志那个函数,点击两个按钮也可以很好的切换刷新,子对话框背景也是默认的灰白色。
以上两个情况的现象,如果子对话框能互相切换刷新,同时子对话框背景成为透明的,则是我最终想要的效果。
请教大侠。 |
|