Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 343
от 31.08.2003, 17:10

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1039
Отправлено ответов: 2350
Активность: 226.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

BOLT
Статус: Профессиональный
Общий рейтинг: 169.89
URL: Начинающему программитсу: софт, примеры, документация, Assembler, C & C++.
Телефон: Три раза АУ!
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.04
[Подробней >>]
Marouder
Статус: Профессиональный
Общий рейтинг: 117.06
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]
 
Avl2k
Статус: Профессиональный
Общий рейтинг: 125.67
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1033. Привет vitya! Вы писали (вопрос № 1031) "размер void * вполне определен и равен размеру указат... (ответов: 3)
Вопрос № 1034. Привет! Как в окне просмотра деревьев различить два елемента с одинаковым текстом? Думаю что использ... (ответов: 2)
Вопрос № 1035. Привет! Я задавал вопрос про создание окна с несколькими частями(№1032). Спасибо всем кто ответил. Д... (ответов: 3)

Вопросов: 3, ответов: 8


 Вопрос № 1033

Привет 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;

int AddEl(MATRIX * m,Item * el)
{
if(m->current >= m->n){
m->n += INC;
m->data = (Item*) realloc (m->data,m->n);
}
m->data[m->current] = *el;
m->current ++;
return 1;
}



Вопрос отправлен: 27.08.2003, 19:46
Отправитель: x3m

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Доброе время суток, 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, где сохраняеться "идентификатор" даного елемента дерева.
Так ли это?



Вопрос отправлен: 27.08.2003, 19:48
Отправитель: x3m

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Добрый день, 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
я не нашел. Что же это за стиль?



Вопрос отправлен: 27.08.2003, 22:00
Отправитель: x3m

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Приветствую Вас, 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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (38)
C / C++ (31)
Perl (5)
Builder / Delphi (20)
Pascal (26)
Basic / VBA (7)
Java / JavaScript (8)
PHP (10)
Криптография (9)
WinAPI (16)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (63)
"Железо" (42)
Поиск информации (24)
Администратору
Windows NT/2000/XP (33)
Linux / Unix (12)
Юристу
Гражданское право (11)
Семейное право (7)
Трудовое право (7)
КоАП (6)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное