Поместить 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
|