サブメニュの項目を選んだときの menvalを得るには?

解決


はんにゃ  URL  2011-01-26 08:46:15  No: 72260  IP: [192.*.*.*]

環境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()*/  
  }
}

編集 削除
はんにゃ  URL  2011-01-26 08:54:33  No: 72261  IP: [192.*.*.*]

なお、buildするときに付随のObjのソースに以下があります

long dopup(long menuID)
{
  MENU_DATA *pMenuData = &gMenuData[menuID];

  return pMenuData->selItem+1;
}

編集 削除
はんにゃ  URL  2011-01-26 19:36:49  No: 72262  IP: [192.*.*.*]

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;

編集 削除