Доброе время суток, Yuriy! Используя SDK (Software Development Kit - Набор разработчика программного обеспечения) - никак. Используя WinAPI - перебираешь все окна EnumWindows(), для каждого из них вызываешь ShowWindow() с параметром SW_MINIMIZE (или SW_FORCEMINIMIZE - оно позволяет свернуть абсолютно любое окно, но доступно только для Win2000 и более поздних версий). Ответ отправлен: 30.06.2003, 10:36 Отправитель: Gibbel Отвечает BOLT
Здравствуйте, Yuriy! Две функции: 1)EnumWindows(...)(EnumWindowsProc(...), EnumDesktopWindows(...) - по вкусу ) 2)ShowWindow(hwnd, SW_MINIMIZE). Ответ отправлен: 01.07.2003, 14:54 Отправитель: BOLT
Вопрос № 890
Уважаемые эксперты!Как вывести массив указателей (строк) при помощи одного MessageBox? Спасибо.
Здравствуйте, Yuriy! Особой проблемы не вижу... Если это строки, то просто слей их вместе, поставив в конце каждой перевод строки: \n\r . А если это именно указатели, то преобразуй в long, а потом - в строковое значение и делай так же.
Ответ отправлен: 30.06.2003, 11:04 Отправитель: baldr Отвечает BOLT
Добрый день, Yuriy! Алгоритм: Запихиваешь все строки в одну и потом ее MessageBox'ом выводишь. Реализация: надеюсь сам справишься? Ответ отправлен: 01.07.2003, 14:41 Отправитель: BOLT
Вопрос № 891
Уважаемые эксперты!Как используя SDK по адресу в памяти прочитать значение? Спасибо.
Здравствуйте, Yuriy! Указатели рулят! Есть у тебя "адрес в памяти" - суть указатель. Допустим, int *chislo; Ему присвоено какое-то значение. chislo=0x434567; Учти, что прочитать данные в адресном пространстве другой проги тебе все равно не дадут! Только в своем или общем! тогда читаешь так: int i; i=*chislo; То есть, разыменовываешь указатель... Ответ отправлен: 30.06.2003, 11:08 Отправитель: baldr Отвечает BOLT
Доброе время суток, Yuriy! В каком смысле? Смотри topic в Win32SDK "Memory Management Functions", может там найдешь что тебе нужно. Если честно, то я не понял для чего это тебе нужно.
Ответ отправлен: 01.07.2003, 14:40 Отправитель: BOLT
Вопрос № 892
Здравствуйте, єксперты. Как можно создать массив, размер которого можно изменять во время выполнения программы (увеличивать и уменьшать) без потери данных, хранящихся в массиве. Ответ, если можно, с исходником.
Доброе время суток, h@Lt! Не мучаемся, а используем 1. stl -> std::vector, std::deque 2. mfc -> CArray 3. ищем в интернете другие библиотеки шаблонных контейнеров. 4. наконец пишем класс, который это делает. Когда массив должен увеличиться - созадаешь новый (больший), копируешь в него данные, потом удаляешь старый. Ответ отправлен: 29.06.2003, 10:26 Отправитель: vitya Отвечает baldr
Добрый день, h@Lt! Исходника не дам, но хороший совет, как известно, лучше исходника... Когда мне надо было делать такие вещи, причем с довольно большой скоростью (200 Гц и выше) - писать протокол опроса железяки - я использовал класс для работы со связными списками. Да, тратится место на указатель, но зато не надо мучиться с кучей всяких массивов. Для той задачи это был оптимальный вариант. Класс писал сам. Ничего сложного. Ответ отправлен: 30.06.2003, 10:58 Отправитель: baldr Отвечает Avl2k
Здравствуйте, h@Lt! Лучше всего использовать STL-класс std::vector, у которого есть resize. Если же хочется ручками, то можно так: // X - вспомогательная структура, чтобы не заморачиваться с исключениями struct X { X( int* p ): m_ptr( p ) {} X( X& x ): m_ptr( x.ReleasePtr() ) {} ~X() { delete m_ptr; } X& operator = ( X& x ) { if( &x != this ) { delete m_ptr; m_ptr = x.ReleasePtr(); } return *this; } int* ReleasePtr() { int* p = m_ptr; m_ptr = 0; return p; } operator int* () const { return m_ptr; } private: int* m_ptr; }; void f() { const unsigned int size = 5; // текущий размер const unsigned int newSize = 3; // новый размер
X p1 = new int[size]; // массив int i; for( i = 0; i < size; ++i ) p1[i] = i; // некие данные X p2 = new int[newSize]; // массив нового размера memcpy(
p2, p1, sizeof( int ) * min( size, newSize ) ); // копируем данные if( newSize > size ) memset( p2 + size, 0, sizeof( int ) * (newSize - size) ); // заполняем остаток p1 = p2; // присваиваем указатели for( i = 0; i < newSize; ++i ) cout << p1[i] << ' '; // выводим массив нового размера } С уважением, Avl2k. Ответ отправлен: 30.06.2003, 10:59 Отправитель: Avl2k Отвечает Yuri Gordienko
Добрый день, h@Lt! char *name = (char*)malloc(10); //размер 10 strcpy(name,"name"); //теперь размер массива станет 20, старое содержимое не изменится name = (char*)realloc(name,20); free(name); Успехов
Ответ отправлен: 01.07.2003, 10:59 Отправитель: Yuri Gordienko Отвечает BOLT
Добрый день, h@Lt! Два варианта: 1)Больше процессорного времени, меньши памяти: создаешь класс, который будет сам увеличивать память, методом удаления старой и выделением новой = старая + сколоько нужно; 2)Меньше процессорного времени, больше памяти: двусвязанный список. Создаешь обьекты классов, которые связываются друг с другом указателями. Но это, по-моему, в наше время не эффектно. 3)Воспользуюся STL(стандартная библиотека шаблонов), там есть один класик vector. Ответ отправлен: 01.07.2003, 14:54 Отправитель: BOLT
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.