2016-11-11 23 views
0

我想在我的應用程序中使用「Enter」和「Shift」鍵。爲了做到這一點,我發現了一些代碼hereID_BUTTON未用常量表達式初始化

void wxWidgetsDialog::OnKey(wxKeyEvent &event) 
{ 
    wxWindow *win = FindFocus(); 
    if(win == NULL){ 
    event.Skip(); 
    return; 
    } 

    if(event.GetKeyCode()==WXK_RETURN){ 
     switch(win->GetId()){ 
    case ID_BUTTON1: 
      wxMessageBox("Button1"); 
      break; 
     case ID_BUTTON2: 
      wxMessageBox("Button2"); 
      break; 
     case ID_BUTTON3: 
      wxMessageBox("Button3"); 
      Destroy(); 
      break;      
    } 
    event.Skip(); 
    } 

} 

當我嘗試使用這個片段中,我得到的錯誤:

D:\WindowsDgps\WindowsDgpsGUI\PortsDialog.cpp|171|error: the value of 'PortsDialog::ID_BUTTON1' is not usable in a constant expression|

D:\WindowsDgps\WindowsDgpsGUI\PortsDialog.cpp|35|note: 'PortsDialog::ID_BUTTON1' was not initialized with a constant expression|

我做了什麼錯?我該如何聲明這些ID才能使其工作?我使用wxWidgets生成的標準實現。

const long PortsDialog::ID_STATICTEXT1 = wxNewId(); 
const long PortsDialog::ID_TEXTCTRL1 = wxNewId(); 
const long PortsDialog::ID_BUTTON1 = wxNewId(); 
const long PortsDialog::ID_TEXTCTRL2 = wxNewId(); 
const long PortsDialog::ID_BUTTON2 = wxNewId(); 
const long PortsDialog::ID_BUTTON3 = wxNewId(); 
const long PortsDialog::ID_PANEL1 = wxNewId(); 

有什麼我可以做,這樣我可以使用Enter鍵激活按鈕,而我在一個靜態文本字段?

回答

3

雖然PortsDialog::ID_BUTTON1是恆定的方式,你不能改變它,它不是一個編譯時間常數。它的值在編譯時不固定,它在運行時被初始化。

switch中的情況必須是編譯時常量。

這裏您不能使用switch,但必須使用ifelse if鏈。

相關問題