2014-03-26 70 views
-2

我正在爲我的菜單編寫GUI。問題是這樣的,當我訪問DrawText函數是越來越只顯示我的sub_menu字符數組的第一個元素,當我訪問使用無法訪問陣列結構的所有元素

 drawText(38,195,*a->sub_Menu[1],0); 
     drawText(38,240, a->sub_Menu[2],0); 
     drawText(38,285, a->sub_Menu[3],0); 
     drawText(38,330, a->sub_Menu[4],0); 

和休息的框顯示空白的作用。 ,當我嘗試訪問使用

 drawText(38,195,*a->sub_Menu[1],0); 
     drawText(38,240,*a->sub_Menu[2],0); 
     drawText(38,285,*a->sub_Menu[3],0); 
     drawText(38,330,*a->sub_Menu[4],0); 

程序編譯和運行,但只要我在我的菜單設置按鈕,單擊該程序崩潰說myprogram.exe已停止工作的DrawText funcion。 我不知道是什麼問題,因爲我是編碼新手。

typedef struct { 
    short startXPos; 
    short startYPos; 
    short height; 
    short width; 
    unsigned int c; 
    char *sub_Menu[5][18]; 
} menu, *ptr_Menu; 

ptr_Menu a; 
char sub_Menu1[5][18] = {"Big Font", "5 channel", "7 channel", "12 channel", "Alarm"}; 
menu touch_menu[10] = {30, 365, 45, 100, 5, &sub_Menu1}; 

void drawMenu(short b) 
{ 
    int k = 0; 
    if (b == 0) { 
     a = &touch_menu[0]; 
     for (k=0; k<a->c; k++) { 
      setColor(GREY); 
      drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height); 
     } 
     setColor(CYAN); 
     drawText(38,150,*a->sub_Menu[0],0); 
     drawText(38,195,*a->sub_Menu[1],0); 
     drawText(38,240,*a->sub_Menu[2],0); 
     drawText(38,285,*a->sub_Menu[3],0); 
     drawText(38,330,*a->sub_Menu[4],0); 
    } 
} 
+0

請使用標題作爲簡短說明。除了你的代碼,你的問題缺乏一切。添加一個文本,你想要做什麼,你嘗試了什麼,以及你得到什麼樣的編譯器錯誤或不當行爲。任何「請幫助我」是不受歡迎的。 – usr1234567

+0

@ atul329,你欠我一杯可讀的縮進啤酒。 :-) – SzG

回答

0

你的問題是,您認爲

char *sub_Menu[5][18]; 

是一個指向5x18字符數組。但實際上它是一個5x18的char指針數組。

更改結構類型是這樣的:

char *sub_Menu[5]; 

和初始化:

menu touch_menu[10] = { 
    { 30, 365, 45, 100, 5, { "Big Font", "5 channel", "7 channel", "12 channel", "Alarm" } }, 
    // remaining 9 menu data comes here 
}; 

並繪製文本。你會更好的一個循環。幹(不要重複自己)。

drawText(38, 240, a->sub_Menu[2], 0); 

的字符串存儲在你的程序的面積不變,它們包含終止零,所以你不必擔心自己的長度(18)。所有你需要的是你的結構中有5個字符指針的數組。

至於初始化,它需要3個級別的嵌套{}符號:

  • 第一級別,因爲touch_menu是一個數組
  • 第二電平,因爲它包含結構
  • 第三級,因爲每個結構包含一個array
+0

我編輯了我的問題,請仔細閱讀。 – atul329