Привет vitya! Вы писали (вопрос № 1031) "размер void * вполне определен и равен размеру указателя - 4 байта в защищенном режиме ix86". Так вот для того же масива я написал функцию которая добавляет елемент к масиву. И в строке m->data[m->current] = *el; ошибка "'void *' : unknown size". (VC 6) Такая же ошибка возникает при return (m->data[m->current]); Как изменити даную функцию что б она работала? typedef void Item; struct typeMATRIX{ Item * data; int n; int current; }; typedef struct typeMATRIX MATRIX;
Доброе время суток, x3m! А зачем тебе вообще void? Используй char, а потом приводи к нужному тебе типу.
Да прибудет с тобой Великая Сила! This message was created by EMan 1.5
Ответ отправлен: 29.08.2003, 13:20 Отправитель: BOLT Отвечает vitya
Доброе время суток, x3m! так, блин, у тебя же получается массив void-ов, когда ты обращаешься m->data[m->current]. Если ты хочешь, чтобы у тебя такое пахало, надо написать тогда Item **; и делать m->data = (void **)malloc(sizeof(void *) * m->n); тогда твой код пахать будет. Ответ отправлен: 28.08.2003, 08:37 Отправитель: vitya Отвечает Marouder
Приветствую Вас, x3m! Так пишет, потому, что тип VOID сам по себе не может иметь никакого значения. Он не имеет размера. Например, простой переменной типа void не существует. То есть нельзя объявить переменную так: void x; И у вас в вашем примере получается массив данных типа void - сам тип void не имеет размера. Размер имеет указатель на него void * То есть строка typedef void Item неправильна. Правильна, будет, например typedef void* Item Ответ отправлен: 28.08.2003, 11:09 Отправитель: Marouder
Вопрос № 1034
Привет! Как в окне просмотра деревьев различить два елемента с одинаковым текстом? Думаю что используеться поле LPARAM lParam структуры TV_ITEM, где сохраняеться "идентификатор" даного елемента дерева. Так ли это?
Добрый день, x3m! у них разный handle - тип - HTREEITEM. Ответ отправлен: 28.08.2003, 08:30 Отправитель: vitya Отвечает Avl2k
Доброе время суток, x3m! Именно так оно и есть. С уважением, Avl2k. Ответ отправлен: 28.08.2003, 11:44 Отправитель: Avl2k
Вопрос № 1035
Привет! Я задавал вопрос про создание окна с несколькими частями(№1032). Спасибо всем кто ответил. Дальше нашел пример в исходникх МСДН - spincube. Там вместо того что б вручную передвигать окна-части (при обработке сообщения WM_MOVE) испльзуеться какой-то стиль окна равный 0х0001 (WS_VISIBLE | WS_CHILD | 0x0001), после этого окна "прилипают" к главному окну. Такого стиля в winuser.h я не нашел. Что же это за стиль?
Приветствую Вас, x3m! Раз для него нет макроопределения значит он какой-то специфичный и выполняет роль не стиля, а сумматора или еще чего-то. Это мое мнение.
Да прибудет с тобой Великая Сила! This message was created by EMan 1.5
Ответ отправлен: 29.08.2003, 13:21 Отправитель: BOLT Отвечает Marouder
Приветствую Вас, x3m! А я нашел в своем winuser.h. Вроде к прилипанию он отношения не имеет. #define WS_EX_DLGMODALFRAME 0x00000001L
Приложение: Ответ отправлен: 28.08.2003, 11:09 Отправитель: Marouder Отвечает Avl2k
Доброе время суток, x3m! Этот стиль - местный (т.е. заведен и используется исключительно классом окна "Spincube"), но на размещение окон он никакого влияния не оказывает. У меня в исходниках SpinTest.h написано: #define SS_ERASE 0x0001 #define SS_INMOTION 0x0002 Далее в spintest.c // Create a couple of SpinCube custom controls, we'll size them later in // the WM_SIZE message handler // for (i = 0; i < 4; i++) gahwndSpin[i] = CreateWindow ("Spincube", "", WS_VISIBLE | WS_CHILD | SS_INMOTION | SS_ERASE, 0, 0, 0, 0, hwnd, NULL, NULL, NULL); А в MainWndProc: case WM_SIZE: { // // Resize the controls such that each cover
half the client area // (plus a little border). // int width = (int) LOWORD(lParam); int height = (int) HIWORD(lParam); SetWindowPos (gahwndSpin[0], NULL, BORDER, BORDER, width/2 - BORDER, height/2 - BORDER, SWP_SHOWWINDOW); SetWindowPos (gahwndSpin[1], NULL, width/2 + BORDER, BORDER, width/2 - 2*BORDER, height/2 - BORDER, SWP_SHOWWINDOW); SetWindowPos (gahwndSpin[2], NULL, BORDER, height/2 + BORDER, width/2 - BORDER, height/2 - 2*BORDER, SWP_SHOWWINDOW); SetWindowPos (gahwndSpin[3], NULL, width/2 + BORDER, height/2 + BORDER, width/2 - 2*BORDER, height/2 - 2*BORDER,
SWP_SHOWWINDOW); break; } Мораль: resize все равно придется писать ручками :) С уважением, Avl2k. Ответ отправлен: 28.08.2003, 12:50 Отправитель: Avl2k
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.