2012-03-01 4 views
1

Привет всем, мне интересно, может ли кто-нибудь сказать мне, что я делаю неправильно? Я сделал диалоговое приложение, и все его сделано отдельно от одной проблемы, которая является моими списками, я добавил их на вкладку и они вызывается обработчиком ниже. Моя проблема в том, где добавить поля полей со спискомWinAPI Combo Box Issue - пропущено по делу

т.е.
// Sets up the combo box menu 
    HWND hwndComboTab = GetDlgItem(hwndDlg, IDC_COMBO1); 
    ComboBox_AddString(hwndComboTab, "Option 1"); 
    ComboBox_AddString(hwndComboTab, "Option 2"); 
    ComboBox_AddString(hwndComboTab, "Option 3"); 

Я предположил, что это было бы под WM_INITDIALOG, но я всегда получаю случай пропустил ошибку. Я предполагаю, что это должно быть внутри

кейс 1: например, это правильно? и если да, то какие varriables отправлены в этот раздел bool?

Также я попытался добавить его перед состоянием переключателя, и он работает, но панель параметров многократно копируется, давая мне возможность спама.

INT_PTR CALLBACK MyTabDialogOne(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) 
{ 

    // Switches the message for tab 1 control 
    switch (uMsg) 
    { 
    case WM_INITDIALOG: // Tryed here case error 
     break; 
    case WM_COMMAND:  
     { 
      switch (LOWORD(wParam)) // No point here as this is after a button is clicked 
      { 
    case IDC_GET_CODE: // Handles the GET Code button in tab 
// Displays the result to main window 
HWND hwndEdit2 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_OUTPUT); 
SetWindowText(hwndEdit2,buffer); 
// Displays the result to bottom bar 
HWND hwndStatic1 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_STATIC1); 
Static_SetText(hwndStatic1, "Completed"); 
//MessageBox(hwndDlg,TEXT("Selected"),TEXT("Button"),0); 
      break; 
      } 
      break; 
     } 
    } 
    return FALSE ; 
} 

Заранее спасибо

ответ

1

Я подозреваю, что, когда вы пытались поставить его в WM_INITDIALOG, вы сделали общую ошибку, не поставив скобки вокруг блока:

INT_PTR CALLBACK MyTabDialogOne(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) 
{ 

    // Switches the message for tab 1 control 
    switch (uMsg) 
    { 
    case WM_INITDIALOG: 
     { 
      HWND hwndComboTab = GetDlgItem(hwndDlg, IDC_COMBO1); 
      ComboBox_AddString(hwndComboTab, "Option 1"); 
      ComboBox_AddString(hwndComboTab, "Option 2"); 
      ComboBox_AddString(hwndComboTab, "Option 3"); 
      break; 
     } 
    case WM_COMMAND:  
     { 
      switch (LOWORD(wParam)) // No point here as this is after a button is clicked 
      { 
       case IDC_GET_CODE: // Handles the GET Code button in tab 
        { 
         // Displays the result to main window 
         HWND hwndEdit2 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_OUTPUT); 
         HWND hwndStatic1 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_STATIC1); 
         SetWindowText(hwndEdit2,buffer); 
         // Displays the result to bottom bar 
         Static_SetText(hwndStatic1, "Completed"); 
         //MessageBox(hwndDlg,TEXT("Selected"),TEXT("Button"),0); 
         break; 
        } 
       default: 
        return FALSE; 
      } 
      break; 
     } 
    default: 
     return FALSE; 
    } 

    return TRUE; 
} 

Не добавляя фигурные скобки вызывает пропущение объявления hwndComboTab. Я также разобрал ваши заявления о возврате. Если вы обработали сообщение, вы должны вернуть TRUE, иначе FALSE. Это за исключением нескольких сообщений, как описано в документе here.

Последнее, что я сделал, это переместить ваши объявления в начало каждой области. Я предполагаю, что ваш файл равен .cpp, хотя вы, кажется, кодируете C. Если ваше расширение было .c, VC++ обрабатывал бы файл как источник C, и способ, которым вы выполняете ваши объявления, даже не компилируется.

+0

Вы подозреваете, что правильно благодарите друга, высоко оценили :-) – user1241548