2016-01-30 2 views
-3

Я создал поле со списком, имеющее список элементов. Как создать другой с разными строками элементов? Могу ли я в любом случае изменить hWnd, потому что, похоже, у первого уже есть hWndCombobxes. Таким образом, когда я применяю его ко второму, я получаю сообщение об ошибке, указывающее, что существует дублирующее значение. Ниже приведен код. Какую функцию я должен назвать иначе?Как создать два разных комбинированных элемента с разными строками элементов?

case WM_CREATE: { 

     HWND hWndComboBox = CreateWindow (TEXT("COMBOBOX"), TEXT (""), 
       CBS_DROPDOWN| CBS_HASSTRINGS | WS_VSCROLL| WS_VISIBLE | WS_CHILD , 
       100, 150, 200, 150, 
       hwnd ,(HMENU) ID_COMBOBOX 1, NULL, NULL); 

     // ADD 2 ITEMS 
     SendMessage (
      hWndComboBox, 
      (UINT) CB_ADDSTRING, 
      (WPARAM) 0, (LPARAM) TEXT ("Item 1")); 

     SendMessage (
      hWndComboBox , 
      (UINT) CB_ADDSTRING, 
      (WPARAM) 0, (LPARAM) TEXT ("Item 2")); 

     // SEND THE CB_SETCURSEL MESSAGE TO DISPLAY AN INITIAL ITEM IN SELECTION FIELD 
     SendMessage (hWndComboBox , LB_SETCURSEL , (WPARAM) 0, (LPARAM) 1); 
+0

Пожалуйста [править] Ваш вопрос название на что-то meaingful. C# и combobox находятся в ваших тегах, что означает, что единственным релевантным словом является * combobox *, который имеет нулевой информационный контент. Ваше название должно описывать проблему, с которой вы сталкиваетесь, или конкретный вопрос, который вы задаете, таким образом, чтобы иметь смысл для будущего пользователя, который находит его в результатах поиска. В любом случае нет необходимости просто повторять информацию, которую вы можете предоставить в тегах. Благодарю. –

+0

Кроме того, C# нигде не находится рядом с C (который нигде не является C++). Используйте теги, которые действительно имеют отношение к вашему вопросу, вместо того, чтобы просто использовать случайные, которые кажутся похожими или знакомыми. Это никоим образом не является кодом C#, и поэтому тэг ошибочно применяется. Теги здесь очень актуальны и имеют конкретный смысл; прочитайте описательный текст, который появляется при попытке использовать их, и используйте только те, которые действительно применимы к вашему вопросу. Если вы не уверены, не используйте его. –

ответ

-2

Скопируйте и вставьте другие выпадающие списки. Сделайте то же самое для функции «Отправить сообщение». Затем измените hWnd второго Combobox на hWndListBox. Сделайте то же самое, что и «Отправить сообщение».

HWND hWndListBox = CreateWindow (TEXT("COMBOBOX"), TEXT (""), 
        CBS_DROPDOWN| CBS_HASSTRINGS | WS_VSCROLL| WS_VISIBLE | WS_CHILD , 
        100, 70, 200, 90, 
        hwnd ,(HMENU) NULL, NULL, NULL); 

       HWND hWndComboBox = CreateWindow (TEXT("COMBOBOX"), TEXT (""), 
        CBS_DROPDOWN| CBS_HASSTRINGS | WS_VSCROLL| WS_VISIBLE | WS_CHILD , 
        100, 150, 200, 100, 
        hwnd ,(HMENU) NULL, NULL, NULL); 

    SendMessage (
      hWndComboBox , 
      (UINT) CB_ADDSTRING, 
      (WPARAM) 0, (LPARAM) TEXT ("Item 2")); 


    SendMessage (
      hWndListBox , 
      (UINT) CB_ADDSTRING, 
      (WPARAM) 0, (LPARAM) TEXT ("Item 1")); 


    // SEND THE CB_SETCURSEL MESSAGE TO DISPLAY AN INITIAL ITEM IN SELECTION FIELD 


    SendMessage (hWndComboBox , CB_SETCURSEL , (WPARAM) 0, (LPARAM) 0); 
    SendMessage (hWndListBox , CB_SETCURSEL , (WPARAM) 0, (LPARAM) 0); 
+0

отформатируйте свой код http://i.stack.imgur.com/vCW2k.png - и удалите тег 'C#' из вашего вопроса –

+0

@Barmak Спасибо. –

0
// put this declaration somewhere up (or better move it to an include file) 
#define ID_COMBOBOX_1  1001 
#define ID_COMBOBOX_2  1002 
// end defines 

case WM_CREATE: { 


    // it is preferably to use SendDlgItemMessage instead of SendMessage 
    // this make things easier 
    // you will not need combobox's HWND, just ComboBox ID 

    TCHAR *Combo_1_Data[]={ 
     TEXT("Item 1"), 
     TEXT("Item 2") 
    }; 

    TCHAR *Combo_2_Data[]={ 
     TEXT("Element 1"), 
     TEXT("Element 2") 
    }; 


    int i; 

    // create two different ComboBoxs 
    CreateWindow (TEXT("COMBOBOX"), TEXT (""), 
     CBS_DROPDOWN| CBS_HASSTRINGS | WS_VSCROLL| WS_VISIBLE | WS_CHILD , 
     100, 150, 200, 150, 
     hwnd ,(HMENU) ID_COMBOBOX_1, NULL, NULL); 

    CreateWindow (TEXT("COMBOBOX"), TEXT (""), 
     CBS_DROPDOWN| CBS_HASSTRINGS | WS_VSCROLL| WS_VISIBLE | WS_CHILD , 
     208, 150, 200, 150, 
     hwnd ,(HMENU) ID_COMBOBOX_2, NULL, NULL); 


    // Fill first Combo with its Data 
    for(i = 0 ; i < (sizeof(Combo_1_Data)/sizeof(Combo_1_Data[0])) ; i++){ 

     SendDlgItemMessage (hwnd,ID_COMBOBOX_1 ,CB_ADDSTRING, 0, (LPARAM) Combo_1_Data[i]); 
    } 
    SendDlgItemMessage (hwnd, ID_COMBOBOX_1 , LB_SETCURSEL , (WPARAM) 0, (LPARAM) 1); 


    // Fill second Combo with its Data 
    for(i = 0 ; i < (sizeof(Combo_2_Data)/sizeof(Combo_2_Data[0])) ; i++){ 

     SendDlgItemMessage (hwnd,ID_COMBOBOX_2 ,CB_ADDSTRING, 0, (LPARAM) Combo_2_Data[i]); 
    } 
    SendDlgItemMessage (hwnd, ID_COMBOBOX_2 , LB_SETCURSEL , (WPARAM) 0, (LPARAM) 1); 
+0

есть сообщение об ошибке, утверждающее, что «скалярный объект» Combo_1_Data «требует один элемент в инициализаторе», а затем то же самое для «Combo_2_Data». Более того, я сказал, что ID_COMBOBOX_1 не был объявлен, и когда я их определяю, я получаю кучу сообщений об ошибках. Что мне делать, пожалуйста. Спасибо, хотя за ответ. –

+0

ошибка «скалярного объекта» была брошена, потому что я забыл добавить accolades '[]' в массивы 'Combo_1_Data' и' Combo_2_Data' – milevyo

+0

ли мой код помог ?, я не слышал от вас? – milevyo

Смежные вопросы