С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Jaxmackey
5 / 5 / 2
Регистрация: 04.10.2013
Сообщений: 142

Поместить ListView главное окно

09.11.2016, 12:37. Показов 1398. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!)
у меня программа состоит из нескольки окон.. основного и окон диалогов. в одном из диалоговых окон есть ListView который я бы хотел увидеть в главном окне.

вот код диалога с ListView
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
BOOL CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch (Message)
    {
    case WM_CLOSE:
    {
        PostQuitMessage(0);
        EndDialog(hWnd, 0); // kill dialog
    }
    break;
    // This Window Message is the heart of the dialog  //
    //================================================//
    case WM_INITDIALOG:
    {
        int i;
        char Temp[255];
        LVBKIMAGE plvbki = { 0 };
        char url[] = "C:\\a.jpg";
        InitCommonControls();
        hList = GetDlgItem(hWnd, IDC_LIST); // get the ID of the ListView                
 
        memset(&plvbki, 0, sizeof(plvbki));
        plvbki.ulFlags = LVBKIF_SOURCE_URL;
        plvbki.pszImage = url;
        plvbki.xOffsetPercent = 40;
        plvbki.yOffsetPercent = 15;
        OleInitialize(NULL);
 
        SendMessage(hList, LVM_SETTEXTBKCOLOR, 0, (LPARAM)CLR_NONE);
        SendMessage(hList, LVM_SETBKIMAGE, 0, (LPARAM)(LPLVBKIMAGE)&plvbki);
 
        SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT); // Set style
 
        SendMessageA(hWnd, WM_SETICON, (WPARAM)1, (LPARAM)LoadIconA(hInst, MAKEINTRESOURCE(IDI_ICON1)));
 
        // Here we put the info on the Coulom headers
        // this is not data, only name of each header we like
        memset(&LvCol, 0, sizeof(LvCol)); // Reset Coluom
        LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; // Type of mask
        LvCol.cx = 0x28;                                // width between each coloum
        LvCol.pszText = "Наименование товара";                     // First Header
        LvCol.cx = 0x42;
 
        // Inserting Couloms as much as we want
        SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol); // Insert/Show the coloum
        LvCol.pszText = "Код";                          // Next coloum
        SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol); // ...
        LvCol.pszText = "Еденица измерения";                       //
        SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&LvCol); //
        LvCol.pszText = "Количество";                              //
        SendMessage(hList, LVM_INSERTCOLUMN, 3, (LPARAM)&LvCol); //
        LvCol.pszText = "Цена";                            //
        SendMessage(hList, LVM_INSERTCOLUMN, 4, (LPARAM)&LvCol); //
        LvCol.pszText = "Дата поступления";                      //
        SendMessage(hList, LVM_INSERTCOLUMN, 5, (LPARAM)&LvCol); // ...same as above
 
        memset(&LvItem, 0, sizeof(LvItem)); // Reset Item Struct
 
                                            //  Setting properties Of Items:
 
        LvItem.mask = LVIF_TEXT;   // Text Style
        LvItem.cchTextMax = 256; // Max size of test
 
        LvItem.iItem = 0;          // choose item  
        LvItem.iSubItem = 0;       // Put in first coluom
        LvItem.pszText = sort_pt->name; // Text to display (can be from a char variable) (Items)
 
        SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&LvItem); // Send to the Listview
 
        for (i = 1; i <= 5; i++) // Add SubItems in a loop
        {
            LvItem.iSubItem = i;
            switch (i)
            {
            case 1:
                LvItem.pszText = sort_pt->code;
                break;
            case 2:
                LvItem.pszText = sort_pt->ed_izm;
                break;
            case 3:
                LvItem.pszText = sort_pt->call;
                break;
            case 4:
                LvItem.pszText = sort_pt->prise;
                break;
            case 5:
                LvItem.pszText = sort_pt->data;
                break;
            }
            SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&LvItem); // Enter text to SubItems
        }
        //ListView_SetItemState(hList,0,LVIS_SELECTED   ,LVIF_STATE);
        ShowWindow(hWnd, SW_NORMAL);
        UpdateWindow(hWnd);
 
        while (TRUE)
        {
 
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                /*
                if(msg.message==WM_CHAR)
                {
                tchar = (TCHAR)msg.wParam;
                if(tchar == 0x1b)
                escKey=1;
 
                }
                */
                if (msg.message == WM_QUIT)// killing while looking for a message
                {
                    break;
                }
 
 
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
    break;
 
    // This Window Message will control the dialog  //
    //==============================================//
    default:
    {
        return FALSE;
    }
    }
 
    return TRUE;
}
/************************************************/

пробывал вот так в главном окне написать, но получается только с LISTBOX'ом

C++
1
2
3
4
5
6
7
case WM_CREATE:
    /* hListBox1 = CreateWindow("LISTBOX", "CarCatalogListBox", WS_CHILD | WS_VSCROLL | WS_BORDER | WS_VISIBLE | LBS_SORT, 150, 10, 530, 355, hWnd, NULL, NULL, NULL);
    UpdateWindow(hListBox);
    */
    hListBox1 = CreateWindow("LISTBOX", "CarCatalogListBox", WS_CHILD | WS_VSCROLL | WS_BORDER | WS_VISIBLE | LBS_SORT, 150, 10, 530, 355, hWnd, NULL, NULL, NULL);
    UpdateWindow(hListBox);
    break;
LISTBOX появляется в главном окне. подскажите как мне прописать чтобы ListView а не LISTBOX??

Добавлено через 15 часов 4 минуты
Ситуация изменилась.. удалось создать LISTVIEW в главном окне. вод код главной оконной функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT paintstruct;
    RECT rcClient;                       // The parent window's client area.
 
    GetClientRect(hwnd, &rcClient);
    switch (message)
    {
    case WM_CREATE:
    {
        hwnd = CreateWindow(WC_LISTVIEW, "", WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hwnd, NULL, hInst, NULL);
        int i;
        char Temp[255];
        LVBKIMAGE plvbki = { 0 };
        char url[] = "C:\\a.jpg";
        InitCommonControls();
        hList = GetDlgItem(hwnd, ID_LISTV); // get the ID of the ListView                
 
        memset(&plvbki, 0, sizeof(plvbki));
        plvbki.ulFlags = LVBKIF_SOURCE_URL;
        plvbki.pszImage = url;
        plvbki.xOffsetPercent = 40;
        plvbki.yOffsetPercent = 15;
        OleInitialize(NULL);
 
 
        // Here we put the info on the Coulom headers
        // this is not data, only name of each header we like
        memset(&LvCol, 0, sizeof(LvCol)); // Reset Coluom
        LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; // Type of mask
        LvCol.cx = 0x28;                                // width between each coloum
        LvCol.pszText = "Наименование товара";                     // First Header
        LvCol.cx = 0x42;
 
        // Inserting Couloms as much as we want
        SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol); // Insert/Show the coloum
        LvCol.pszText = "Код";                          // Next coloum
        SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol); // ...
        LvCol.pszText = "Еденица измерения";                       //
        SendMessage(hList, LVM_INSERTCOLUMN, 2, (LPARAM)&LvCol); //
        LvCol.pszText = "Количество";                              //
        SendMessage(hList, LVM_INSERTCOLUMN, 3, (LPARAM)&LvCol); //
        LvCol.pszText = "Цена";                            //
        SendMessage(hList, LVM_INSERTCOLUMN, 4, (LPARAM)&LvCol); //
        LvCol.pszText = "Дата поступления";                      //
        SendMessage(hList, LVM_INSERTCOLUMN, 5, (LPARAM)&LvCol); // ...same as above
 
        memset(&LvItem, 0, sizeof(LvItem)); // Reset Item Struct
 
                                            //  Setting properties Of Items:
 
        LvItem.mask = LVIF_TEXT;   // Text Style
        LvItem.cchTextMax = 256; // Max size of test
 
        LvItem.iItem = 0;          // choose item  
        LvItem.iSubItem = 0;       // Put in first coluom
        LvItem.pszText = "90"; // Text to display (can be from a char variable) (Items)
 
        SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&LvItem); // Send to the Listview
 
        for (i = 1; i <= 5; i++) // Add SubItems in a loop
        {
            LvItem.iSubItem = i;
            switch (i)
            {
            case 1:
                LvItem.pszText = "1";
                break;
            case 2:
                LvItem.pszText = "2";
                break;
            case 3:
                LvItem.pszText = "3";
                break;
            case 4:
                LvItem.pszText ="4";
                break;
            case 5:
                LvItem.pszText = "5";
                break;
            }
            SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&LvItem); // Enter text to SubItems
        }
        //ListView_SetItemState(hList,0,LVIS_SELECTED   ,LVIF_STATE);
        ShowWindow(hwnd, SW_NORMAL);
        UpdateWindow(hwnd);
 
        break;
    }
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
                case IDM_1:
                {
                     strcpy(init_dialog_mes, "Наименование товара");
                     DialogBox(hInst, "MYDB", hwnd, (DLGPROC)DialogFunc);
                }
                break;
                case IDM_3:
                {
                     strcpy(init_dialog_mes, "Выборка по названию товара");
                     DialogBox(hInst, "MYDB3", hwnd, (DLGPROC)Dialog3Func);
                }
                break;
                case IDM_10:
                {
                    hdc = GetDC(hwnd);
                    TextOut(hdc, 1, 1, "123878787878", 8);
                    ReleaseDC(hwnd, hdc);
                }
                break;
        }
        break;
    case WM_DESTROY:                /*завершение программы*/
        PostQuitMessage(0);
        break;
    default:
        /*Все сообщения, не обрабатываемые в данной функции, направляются на обработку по умолчанию*/
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
в главном окне появилась по всей длинне серая полоска.. как теперь к нему обратиться если его нет в ресурсах.. надо ли что то ресурсах писать или в заголовках когда таким образом создаешь окно?? Потому что сейчас почему то не получается поделить на столбцы... объясните в чем дело
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2016, 12:37
Ответы с готовыми решениями:

Создать окно поверх главного окна, чтобы главное окно было доступно
здравствуйте. подскажите пожалуйста как сделать окно поверх главного окна, но чтобы главное окно было доступно, как в word окно...

Главное окно программы
Как достать дескриптор главного окна программы зная только ид процесса(pid,dwProcessId).

Главное окно и контролы
Каким образом (кроме ручного кода) можно добавлять контролы в главное окно программы? Дизайнером быстрее, имхо :\ В свое время выкрутился:...

1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
10.11.2016, 19:59
Цитата Сообщение от Jaxmackey Посмотреть сообщение
как теперь к нему обратиться, когда таким образом создаешь окно?
Удалим строку
hList = GetDlgItem(hwnd, ID_LISTV);
и используем значение, возвращаемое функцией CreateWindow
C++
1
2
3
4
5
            hList = CreateWindow(WC_LISTVIEW, "", 
                WS_VISIBLE | 
                WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 
                0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, 
                hwnd, NULL, hInst, NULL);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2016, 19:59
Помогаю со студенческими работами здесь

Как создать главное окно диалоговым
Не подскажите как создать главное окно диалоговым, что бы на него можно было нанисте кнопки и т.д.

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

При закрытии дочернего окна закрывается еще и главное окно
#include &lt;Windows.h&gt;//подключение winAPI #include &lt;tchar.h&gt; HWND hChildWnd1; HWND hButton1; HWND edit; TCHAR WinName =...

Поместить окно поверх другого окна
Здравствуйте, интересует один вопрос Необходимо поместить мою Форму приложения по верх текущего Главного окна но не использовать как по...

Добавление в уже созданное окно ListView
В общем, есть основная база данных, которая загружается с самого начала старта программы, все элементы из БД сразу отображаются в ListView....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru