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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 605
от 08.12.2006, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 429, Экспертов: 51
В номере:Вопросов: 8, Ответов: 13


Вопрос № 65216: Доброе время суток товарищи эксперты. У меня вопрос. Есть досовские программы, в которых есть "немножко" графики, т. е. кнопочки, по которым "гуляют" стрелками. Так вот как все это делается. Если можно прошу предоставить маленький...
Вопрос № 65232: Здравствуйте уважаемые эксперты Вопрос у меня следующий. Я работаю в VC6, мне нужно поймать нажатие клавиш на ListView событие OnKeydown void CMyView::OnKeydownLst (NMHDR* pNMHDR, LRESULT* pResult) { NMLVKEYDOWN* nmkd = (NMLVKEYDOWN*)...
Вопрос № 65233: Пишу на Си в MSVC Все пути к библиотекам проинициали в настройках #include <stdlib.h> #include <iostream.h> #include <stdio.h> ..... void main(int * argc,int * argv) { int i=400; char ...
Вопрос № 65240: Прошу Вашей помощи господа эксперты в програмировании на Microsoft Visual C++ Возможно есть какая то функци генерации случайного 10-значного числа ? Есть два обьекта Button и Label. Прошу дайте кусочек исходника как с помощю этих двух обьекто...
Вопрос № 65243: Подскажите как правильно установить VS 2005. Во время установки с диска появляется сообщение "вставте диск VS 2005". Установка заканчивается на Directoria: ...Visual Studio PE-ENU File: htmllite.dll....
Вопрос № 65246: Здравствуйте! Подскажите, пожайлуста, что делать. Проблема: написал программу на С++ для упращения расчетов по учебе, компилировал, отнес другу, а программа не запускается просит какую-то DLL. Можно ли настроить компилятор так, чтобы программа ра...
Вопрос № 65278: Уважаемые экспреты! У меня вот такая задача: есть два WORD массива(a,b) длинной length. Задача: скопировать все значения из одного массива в другой кроме тех что равны none; Соответсвенно делаю примерно так: WORD curren...
Вопрос № 65315: Доброго времени суток уважаемые эксперты. Подскажите пожалуйста, где можно найти документацию по теме "Создание клиент серверного приложения сервера базы данных и библиотеки"....

Вопрос № 65.216
Доброе время суток товарищи эксперты. У меня вопрос. Есть досовские программы, в которых есть "немножко" графики, т. е. кнопочки, по которым "гуляют" стрелками. Так вот как все это делается. Если можно прошу предоставить маленький примерчик или дать ссылку. Заранее спасибо.
Отправлен: 02.12.2006, 13:45
Вопрос задал: psevdo (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: dentist
Здравствуйте, psevdo!
во первых, вы должны понять, что "досовские" (консольные) приложения работают в текстовом режиме. т.е. всё что вы видите на экране это текст (грубо говоря). даже значки типа квадратиков, прямоугольников итп.
конечно, неудобно перерисовывать весь экран, ради того, чтобы обновить внешний вид какой-то кнопочки внизу оного. поэтому программисты пишут напрямую в память, по соответствующему адресу.
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 7-ой класс)
Ответ отправлен: 02.12.2006, 22:09

Отвечает: Терсков Сергей
Здравствуйте, psevdo!
Это кнопки рисованные с помощью псевдографики. Делать их можно было либо самому, либо используя сторонние библиотеки, как например Turbo Vision.
Ответ отправил: Терсков Сергей (статус: 2-ой класс)
Ответ отправлен: 04.12.2006, 04:00


Вопрос № 65.232
Здравствуйте уважаемые эксперты
Вопрос у меня следующий. Я работаю в VC6, мне нужно поймать нажатие клавиш на ListView событие OnKeydown
void CMyView::OnKeydownLst (NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVKEYDOWN* nmkd = (NMLVKEYDOWN*)pNMHDR;
//например ALT+Z
if( nmkd->wVKey==90)
{MessageBox("Нажата клавиша Z");}
}
Здесь получается все нормально
А мне нужно ALT+Z
Если вместо 90 ставлю VK_Z то получаю ошибку
error C2065: 'VK_Z' : undeclared identifier

Как отработать нажатие двух клавиш?
Отправлен: 02.12.2006, 14:56
Вопрос задал: Creonus (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Torsten
Здравствуйте, Creonus!
Тебе нужно ловить другое сообщение OnSysKeyDown, именно оно срабатывает при нажатии alt.
---------
#define MAGIC_NUMBER 0xdeface
Ответ отправил: Torsten (статус: 3-ий класс)
Ответ отправлен: 02.12.2006, 17:20
Оценка за ответ: 2
Комментарий оценки:
Ответ о ниочем
ListView не имеет события OnSysKeyDown
мне хотелось бы получить хоть две строчки кода
если я нажимаю на заполненном данными ListView клавиши ALT+Z то появляется мессидж "Нажата клаиши ALT+Z" {MessageBox("Нажата клавиша Z на ListView ");}
ТОЛЬКО и всего

Отвечает: Sergey A. Wedensky
Здравствуйте, Creonus!
По логике при нажатии двух клавиш должно приходить два сообщения с VK_MENU и (90) соответственно. Можно еще попробовать получить состояние клавиши Alt при помощи GetAsynkKeyState.
Ответ отправил: Sergey A. Wedensky (статус: 9-ый класс)
Ответ отправлен: 04.12.2006, 12:28
Оценка за ответ: 4
Комментарий оценки:
Неплохое предложение
Но лучше, наверное, это сделать с помощью функции GetKeyState(18), где 18 - это код клавиши ALT

Отвечает: LeoGann
Здравствуйте, Creonus!
Вам правильно ответили, прошлый раз.
Необходимо
MyView.h
protected:
afx_msg LRESULT OnSyskey(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()

MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CListCtrl)
ON_MESSAGE(WM_SYSKEYDOWN, OnSyskey)
END_MESSAGE_MAP()

LRESULT CMyView::OnSyskey(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox(_T("Ok"));
return 0;
}

Думаю, разберётесь.
У меня все работает.
Ответ отправил: LeoGann (статус: 1-ый класс)
Ответ отправлен: 04.12.2006, 12:52
Оценка за ответ: 3
Комментарий оценки:
Уважаемые эксперты, Мне нужно было просто поймать нажатие клавиш ALT+Z
на заполненном данными ListLiew находящимся на форме (class CFormView
у меня приложение MFC (VC6 или даже NET))
----------------------------------------------------
А теперь ВОТ работающий код
может быть не идеальный, но работающий
----------------------------------------------------
void CMyView::OnKeydownLst (NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVKEYDOWN* nmkd = (NMLVKEYDOWN*)pNMHDR;
//Код клавиши ALT=18, Z=90
BOOL Control=GetKeyState(18)<0;
switch(nmkd->wVKey)
{
case 90:
if(!Control)
{MessageBox("Z");}
else
{MessageBox("ALT+Z");}
}
*pResult = 0;
}


Вопрос № 65.233
Пишу на Си в MSVC
Все пути к библиотекам проинициали в настройках

#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
.....
void main(int * argc,int * argv)
{

int i=400;
char * hmem;
hmem=(char *)malloc(i);
.....

Компилиться нормально
Линукется с ошибкой:
Linking...
1.obj : error LNK2001: unresolved external symbol "void * __cdecl malloc(int)" (?malloc@@YAPAXH@Z)
Debug/1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
В чем причина? Где ошибка?
Спасибо
Отправлен: 02.12.2006, 14:59
Вопрос задал: Olegxxx (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jite
Здравствуйте, Olegxxx!

Скорее всего дело в пути к библиотеки, хотя это не единственная возможная проблема. Дело в том, что при установке Visual сам нормально прописывает пути к стандартным библиотекам. Новые приходится подключать только в том случае, если вы начинаете использовать какой либо сторонний SDK или библиотеку.
Ну и конечно, в случае какой-либо "ручной" установки Visual'а - не установщиком, а переписыванием.

Если считаете возможным, вышлите мне на мыло файл исходника целиком. Тогда смогу ответить вам точно. jite@rybatskoe.net.

---------
В программировании нет замены уму, опыту, вкусу и здравому смыслу.
Ответ отправил: Jite (статус: 1-ый класс)
Ответ отправлен: 02.12.2006, 15:40


Вопрос № 65.240
Прошу Вашей помощи господа эксперты в програмировании на Microsoft Visual C++
Возможно есть какая то функци генерации случайного 10-значного числа ?
Есть два обьекта Button и Label. Прошу дайте кусочек исходника как с помощю этих двух обьектов организовать генерацию случайных 10-значных чисел.
Если можно более подробнее, возможно с коментариями, потому что только начинаю изучать програмирование на C++
Спасибо за внимание.
Отправлен: 02.12.2006, 15:44
Вопрос задал: Visualss (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Visualss!
Можно попробовать вот такой вариант

srand((unsigned)time(NULL));

char str[10];

long number;

for(int i=0; i<10; i++)
str[i] = static_cast<char>(rand()%10);

number = atol(str);

Теперь number это случайное десятизначное число.
Ответ отправил: Терсков Сергей (статус: 2-ой класс)
Ответ отправлен: 04.12.2006, 03:53

Отвечает: Sergey A. Wedensky
Здравствуйте, Visualss!
Как использовать Button и Label это уже Вам решать, а получить десятизначное случайное число можно, например, так:

1E9 + (1E10-1E9-1)*rand()/RAND_MAX
Ответ отправил: Sergey A. Wedensky (статус: 9-ый класс)
Ответ отправлен: 04.12.2006, 12:24


Вопрос № 65.243
Подскажите как правильно установить VS 2005. Во время установки с диска появляется сообщение "вставте диск VS 2005". Установка заканчивается на Directoria: ...Visual Studio PE-ENU
File: htmllite.dll.
Отправлен: 02.12.2006, 15:51
Вопрос задал: MasterZ (статус: 7-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Torsten
Здравствуйте, MasterZ!
Скопируй все файлы на жеский диск и устанавливай оттуда, а не с dvd.
---------
#define MAGIC_NUMBER 0xdeface
Ответ отправил: Torsten (статус: 3-ий класс)
Ответ отправлен: 02.12.2006, 17:14
Оценка за ответ: 4
Комментарий оценки:
Делал и так. Делал образ из Daemon Tools и запускал.

Отвечает: V1s0r
Здравствуйте, MasterZ!

Если под "Во время установки с диска" ты имеешь в виду DVD-диск, то и у меня была такая проблема. Я просто скопировал содержимое DVD на жёсткий диск и запустил установку заново. Помогло.
Ответ отправил: V1s0r (статус: 1-ый класс)
Ответ отправлен: 03.12.2006, 10:27


Вопрос № 65.246
Здравствуйте!
Подскажите, пожайлуста, что делать. Проблема: написал программу на С++ для упращения расчетов по учебе, компилировал, отнес другу, а программа не запускается просит какую-то DLL. Можно ли настроить компилятор так, чтобы программа работала без требований чего-то еще кроме нее? Если можно то как?

Пишу в Borland C++Builder 6
Отправлен: 02.12.2006, 15:56
Вопрос задал: Sh2d000w (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, Sh2d000w!
Нужно в Project->Options на вкладке Compiler нажать "Release" (не обязательно),
на вкладке Packages снять галку с "Build with runtime packages"
и на вкладке Linker снять галку с "Use dynamic RTL".
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 4-ый класс)
Ответ отправлен: 02.12.2006, 16:23
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо!


Вопрос № 65.278
Уважаемые экспреты!

У меня вот такая задача:
есть два WORD массива(a,b) длинной length. Задача: скопировать все значения из одного массива в другой кроме тех что равны none;

Соответсвенно делаю примерно так:

WORD current;
for(x=0;...
{
current=a[x];
if(current!=none)
{
memcpy(&b[x],¤t,2);
}
}

Вопрос: Нет ли способа сделать это быстрее? В данном случае мне важна только СКОРОСТЬ!

P.S. Что-бы был более понятен вопрос копируюю содержимое рисунка в нрафический буфер,построчно т.к. рисунок меньше по размерам чем буфер.
Отправлен: 02.12.2006, 19:22
Вопрос задал: Golden Spider (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Torsten
Здравствуйте, Golden Spider!
Вообщем-то алгоритм memcpy предназначен для копирования произвольно-больших обьемов информации, копирую по 2 байта через цикл ты не получишь никакой производительно в отличие от простого сравнения.

Для того чтобы уменьшить время, по-первых нужно уменьшить количество раз прохождения цикла. Вместо того чтобы прибавлять по 1 к массиву, лучше сделать 2 или 3 сравнений в самом теле цикла. Кроме того лучше использовать указатели, а не индексацию в массиве.

И не очень понятно, что ты делаешь с теми элементами, которые равны none, по твоему коду такие элементы проскакивают, то есть у них остается такое же значение, какое и было, в таком случае я бы написал такой код.
Функция CopyArrayExclude, остальное код проверки работоспособности.

Приложение:

---------
#define MAGIC_NUMBER 0xdeface

Ответ отправил: Torsten (статус: 3-ий класс)
Ответ отправлен: 03.12.2006, 00:46
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Хочу прояснить, зпчем мне нужно что-бы элементы проскакивали. Как я уже говорил я копирую содержимое раста в буфер экрана (смартфон), элемент none - собственно говоря цвет который нужно считать прозрачным. Т.е. пиксели на которые попадает данный цвет должны оставаться нетронутыми. А memcpy осталось еще с предидущей отладки - тогда я делал без прозрачности и копировал блоками, убирать было лень... :)


Вопрос № 65.315
Доброго времени суток уважаемые эксперты. Подскажите пожалуйста, где можно найти документацию по теме "Создание клиент серверного приложения сервера базы данных и библиотеки".
Отправлен: 03.12.2006, 00:42
Вопрос задал: Seregaim (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: din
Здравствуйте, Seregaim!
Так как этот вопрос идет в рассылке С/С++, то делаем вывод, что писать Вы их собираетесь на указанных языках. Сразу же оговорюсь, что данные языки являются не самым удобными, для разработки такого типа приложений. Конечно же Вы можете использовать например COM+, CORBA или .NET, чтобы писать на С/С++, но стоит ли? Если писать под .NET то уж лучше на С#, а COM+ и CORBA уже устарели и браться за их изучение не имеет смысла. Подваляющее большинство трехуровневых распределенных (клиент-серверных) систем написано на основе Java и .NET. А что касается 2-х уровневых (клиент - сервер БД), то тут можно писать в принципе на любом языке программирования, включая и языки веб-программрования. Библиотек или API для взаимодействия с БД великое множество (ODBC и JDBC драйвера, ADO, JDO, OLEDB и т.д.). Я могу конечно скинуть какие-то ссылки, но думаю Вам лучше сделать запрос в гугл, например "Разработка распределенных систем" или "Разработка клиент-серверных систем", Вам лу чше самому выбрать, что для Вас подходит. Что касается БД, то тут нужно искать по конкретной БД, т.е. если Вас интересует Оракл, то искать "Документация по Oracle".
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Практикант)
Ответ отправлен: 03.12.2006, 01:05
Оценка за ответ: 3


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное