環境WindowsXp、VC6.0 C言語ソースで
以下の右ボタンによるメニュー選択があります。このとき、サブメニュ9番のthickmenuの項目を選んでも
MainLoop()のmenvalは以前の選択した 例えば2番の2を維持したままで9に成りません。これを9にするにはどうしたらよいでしょうか?
なお、サブメニュ内の各選択(数値は正常に取得できます
void initialize(void)
{ int ic,i,j,k;
mainmenu=newpup();
thickmenu=newpup();
addtopup(mainmenu,"MainMenu %t|1 radius(or airgap)/LEFT,pitch/Middle|2 profile on/off|3 move/LEFT,zoom/MIDDLE|4 Focusing/Viewside|5 Exp-End/Exit|6 integral profile on/off|7 reversal with airgap on/off|8 hardprint|9 thickness/reset all%m",thickmenu);
addtopup(thickmenu,"plate thickness%t %F|std 3.09mm%x1|3.10mm%x2|3.13mm%x3|3.16mm%x4|3.19mm%x5|match IPD dis%x10|match Pitch dis%x11|all reset%x0",setthick);
}
void MainLoop(void)
{
short attached=1;
//static short value;
static int value;
if (qtest() || !attached)
{
switch (qread(&value))
{
case MENUBUTTON:
if (value==1) menval=dopup(mainmenu);
switch (menval)
{
printf("after MENUBUTTON menval=%d prfl=%d\n",menval, prfl);/* なぜ ここでprflが変わるか?*/
case 1:
rdsvari();
break;
case 2:
setprfl(0);
break;
case 3:
movzoom();
break;
case 4:
focusin();
break;
case 5:
winclose(gwcid);
exit(0);
break;
case 6:
setprfl(1);
break;
case 7:
resersal();
break;
case 8:
hardprint();
break;
/* case 9 thickness 固定数値はaddtopup(thickmenu, */
/* case 10 direction number 固定数値はaddtopup(diNumMenu, */
} /* end of switch(menval)*/
break;
}/* end of switch()*/
}
}
なお、buildするときに付随のObjのソースに以下があります
long dopup(long menuID)
{
MENU_DATA *pMenuData = &gMenuData[menuID];
return pMenuData->selItem+1;
}
switch (menval)
{
}
の後に
menval = -1; /* reset added 2011*/
break;
を入れて、値をResetして、Submenuの選択のときに前のmainmenuを選ばないようにしました
検討された方々 ありがとうございました。
case MENUBUTTON:
if (value == 1) menval=dopup(mainmenu); /* right mouse button is pressed */
switch (menval)
{
case 1:
rdsvari();
break;/
case 2: /* subMenu を選択すると その前のmenuvalが残る*/
setprfl(0);/* profile blur on/off prfl=0/9 */
break;
case 3:
movzoom();
break;
以後略
} /* end of switch(menval)*/
menval = -1; /* reset added 2011*/
break;