Все выпуски  

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


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

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 671
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 226
∙ повысить рейтинг »
mklokov
Статус: 4-й класс
Рейтинг: 136
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1905
Дата выхода:04.04.2017, 12:15
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:24 / 20
Вопросов / ответов:3 / 10

Консультация # 63698: Мне срочно нужна программа на С. Нужно в матрице отсортировать нечётные столбцы по возрастанию и чётные по убыванию. Заранее огромное спасибо!!! ...
Консультация # 65232: Здравствуйте уважаемые эксперты Вопрос у меня следующий. Я работаю в VC6, мне нужно поймать нажатие клавиш на ListView событие OnKeydown void CMyView::OnKeydownLst (NMHDR* pNMHDR, LRESULT* pResult) { NMLVKEYDOWN* nmkd = (NMLVKEYDOWN*)pNMHDR; //например ALT+Z if( nmkd->wVKey==90) {MessageBox("Нажата клавиша Z&quo...
Консультация # 21226: Здравствуйте эксперты. Как-то я задавал вопрос (18879) об определении констант внутри класса. Спасибо за все присланные ответы, но решить свою проблему не получилось. Попробую рассказать о ней чуть подробней, может кто подскажет как красиво ее разрешить: Есть несколько сходных классов, которые описывают различные устройства.

Консультация # 63698:

Мне срочно нужна программа на С.
Нужно в матрице отсортировать нечётные столбцы по возрастанию и чётные по убыванию.
Заранее огромное спасибо!!!

Дата отправки: 22.11.2006, 12:25
Вопрос задал: POSTAL
Всего ответов: 3
Страница онлайн-консультации »


Консультирует LeoGann:

Здравствуйте, POSTAL!
Держи, прога правда написана на С++, если возникнут вопросы пиши

Приложение:

Консультировал: LeoGann
Дата отправки: 22.11.2006, 12:55
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ross:

Здравствуйте, POSTAL!

Немного более простой пример, использующих функцию сортировки массивов методом пузырька.

Приложение:

Консультировал: Ross
Дата отправки: 22.11.2006, 21:51
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Терсков Сергей:

Здравствуйте, POSTAL!
Вот текст с использование сортировки методом выбора

Приложение:

Консультировал: Терсков Сергей
Дата отправки: 23.11.2006, 03:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 65232:

Здравствуйте уважаемые эксперты
Вопрос у меня следующий. Я работаю в 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
Страница онлайн-консультации »


Консультирует Torsten:

Здравствуйте, Creonus!
Тебе нужно ловить другое сообщение OnSysKeyDown, именно оно срабатывает при нажатии alt.

Консультировал: Torsten
Дата отправки: 02.12.2006, 17:20
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Sergey A. Wedensky:

Здравствуйте, Creonus!
По логике при нажатии двух клавиш должно приходить два сообщения с VK_MENU и (90) соответственно. Можно еще попробовать получить состояние клавиши Alt при помощи GetAsynkKeyState.

Консультировал: Sergey A. Wedensky
Дата отправки: 04.12.2006, 12:28
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует 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
Дата отправки: 04.12.2006, 12:52
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 21226:

Здравствуйте эксперты.
Как-то я задавал вопрос (18879) об определении констант внутри класса.
Спасибо за все присланные ответы, но решить свою проблему не получилось.
Попробую рассказать о ней чуть подробней, может кто подскажет
как красиво ее разрешить:
Есть несколько сходных классов, которые описывают различные устройства.
(физические,например датчики, контроллеры).
Каждое устройство характеризуется набором определенных констант: параметры(например количество аналоговых входов) и кодов ошибок.
которые к тому же используются при определении класса (например при объявлении массива данных в класса).
Конечно, можно для каждого класса определить свой набор, добавляя перед наименованием какой нибудь префикс, типа TypeDvc_НаименованиеПараметра.
Но в моем случае это как-то не очень красиво и не удобно, так как данные константы используются часто одинаково, и для каждого класса приходится переписывать имена, а если префикс давать более-менее осмысленный, то получается просто длинно.
Как бы поступили в данном случае эсперты.
Компилятор Visual C++6
с уважением Ильдар
ildar_trvl@rambler.ru

Дата отправки: 23.05.2005, 14:01
Вопрос задал: ildar
Всего ответов: 4
Страница онлайн-консультации »


Консультирует Jadd:

Здравствуйте, ildar!
Открываем учебник по С++ и читаем главу про ООП и полиморфизм. Так вот. Берем и пишем родительский класс. Например, так:
class CDevice
{
private:
int nOutputCount;
int SomeConstant;
......
public:
void SomeFunc();
};
Дальше начинаем делать "ветки" от родителя. К примеру:
class CController: public CDevice
{
//делаем инициализацию и прочее
};
А потом по коду уже объявляем переменную типа CDevice и, на основании каких-то условий, создаем объект типа, производного от CDevice. Например:
//some code
CDevice *device;
//к примеру
if (nType == CONTROLLER)
device = new CController();
if (nType == DATCHIK)
device = new CDatchik()
ну и так далее. И дальше можно использовать всю силу полиморфизма, применяя в родительских классах виртуальные функции и переопределяя их в дочерних. Удачи.

Консультировал: Jadd
Дата отправки: 23.05.2005, 14:32
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует DSota:

Здравствуйте, ildar!
Для каждого устройства можно создать свой класс, дочерний от класса, который у
тебя уже есть, отличающийся от других только значением констант (см. пример).

Приложение:

Консультировал: DSota
Дата отправки: 23.05.2005, 15:15
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует yatagan:

Здравствуйте, ildar!
Попробуй использовать перечисления -- наборы именованых целочисленных констант. НАпример:
// sensor.h
class sensor
{
public:
//обьявление типа данных "перечисление всяких констант"
enum constants {
//кол-во портов
num_inputs = 2,
//код ошибки
error_overflow = 548762,
//код ошибки
error_baddata = 14577};
};
//
=============================
теперь как обращатся к этим константам:
=============================
в методах класса:
//
sensor::sensor()
{
//получить значение константы
int x = constants::num_inputs;
//то же что и:
x = num_inputs;
}
//
-------------------------------
во внешних функциях:
//main.cpp
#include "sensor.h"
#include <iostream.h>
int main()
{
//получить значение константы
cout << sensor::constants::num_inputs << endl;
//то же что и:
cout << sensor::num_inputs << endl;
return 0;
}
//
-------------------------------
понятное дело, что изменять значения таких констант нельзя...
я не совсем понял, что ты имел в виду тут:
"которые к тому же используются при определении класса (например при
объявлении массива данных в класса)."
если еще есть вопросы -- уточни -- постараюсь помочь:)

Консультировал: yatagan
Дата отправки: 23.05.2005, 18:59
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Raptor1:

Здравствуйте, ildar!
Я бы классы устройств сделал наследником некоторого виртуального устройства в котором бы определил защищенные параметры абстрактного устройства (то же число входов и др.) и функции для доступа к ним. Если параметры могут быть произвольными, например температура и т.д. то их тоже следует определить в виде некоторого класса (структуры) с именем параметра и возможностью получить значение (GetData какой нибудь). В классе устройств будет присутствовать некоторый вектор или очередь с параметрами присущими данному устройству. Тогда можно реализовать получение параметра по его имени в некоторой функции, в которой будет выполняться поиск парамерта с запрошенным именем и возврат его значения в случае удачного поиска, или какого нибудь ошибочного значения (например -1) в случае отсутствия запрошенного параметра.

Консультировал: Raptor1
Дата отправки: 24.05.2005, 00:02
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное