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

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


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

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

Выпуск № 544
от 06.10.2006, 00:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 390, Экспертов: 50
В номере:Вопросов: 7, Ответов: 11


Вопрос № 57232: Здравствуйте, уважаемые эксперты. OS - Windows XP, работа с реестром. Помогите написать программу, которая счтитывает все содержимое из реестра по адресу [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionThemeManager], а затем ...
Вопрос № 57238: Здравствуйте эксперты. Возник вопрос по тому же чату. Я не могу понят какой элемент управления используется в той же Mirc для отображения сообщения. Я пробовал Listbox =))) Не подходит. Я пишу чат на чистом WinAPI и прошу помочь если вы з...
Вопрос № 57243: Уважаемые эксперты, помогите пожалуйста заменить вызов функции malloc оператором new вызовы такие: indexes = malloc ((size_t)(n+1)*sizeof(tindex)); lpBits = (LPSTR) malloc (bmImgSize*sizeof (BYTE)); p_gray_palette = (L...
Вопрос № 57245: доброго времение суток, уважаемые эксперты У меня возникла такая неприятность.С полем EDIT у меня связана переменная типа int и есть обработчик EN_CHANGE в котором вызывается UpdateData(TRUE), и соответственно когда я стираю все что есть в поле E...
Вопрос № 57249: Доброго времени суток! Уважаемые эксперты, столкнулся с необходимостью нахождения подкоренного выражения из целого положительного числа большой размерности. К примеру: double x = 40353607; double i = SQR_manual(x); // Должно пол...
Вопрос № 57251: Здравствуйте, уважаемые эксперты! Написал в эту рассылку и в UNIX, так как не знаю, куда мой вопрос относится:)). Как вы поняли, пишу под FreeBSD на Си. Программа про обработку сигнала по нажатию <Ctrl+c>. При нажатии должна выводит...
Вопрос № 57262: Здравствуйте! Вопос по VCL. Подскажите, пожалуйста, как можно пуолучить указатель на компонент TStringGrid. на строчку TStringGrid *s; компилятор пишет Undrfined Symbol "TStringGrid" Undrfined Symbol "s"<...

Вопрос № 57.232
Здравствуйте, уважаемые эксперты.
OS - Windows XP, работа с реестром.
Помогите написать программу, которая счтитывает все содержимое из реестра по адресу [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionThemeManager],
а затем записывает полученые данные туда же.
Отправлен: 30.09.2006, 16:20
Вопрос задал: Zeitgeist (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vaga
Здравствуйте, Zeitgeist!

Читаем из реестра

CRegKey reg;
CString RegBranch("\Software\Microsoft\Windows\CurrentVersion\ThemeManager");
if(!reg.Open(HKEY_CURRENT_USER,RegBranch)==ERROR_SUCCESS)
{
AfxMessageBox("Error using dialing rules");
reg.Close();
exit(0);
}
DWORD dwValue;
if(!reg.QueryDWORDValue("DWordValue",dwValue)==ERROR_SUCCESS)
{
AfxMessageBox("Can't read DWordValue key");
reg.Close();
exit(0);
}

ULONG pnChars;
CString szStringValue
reg.QueryStringValue("StringValue", szStringValue.GetBuffer(pnChars),&pnChars);
reg.Close()

//Пишем
CRegKey key;
key.Open(HKEY_CURRENT_USER,"\Software\Microsoft\Windows\CurrentVersion\ThemeManager");
key.SetDWORDValue("DWordValue",dwValue);
key.SetStringValue("StringValue",szStringValue,REG_SZ);
key.Close();

если ничего не напутал...

Приложение:

---------
Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец

Ответ отправил: Vaga (статус: 3-ий класс)
Ответ отправлен: 02.10.2006, 21:15


Вопрос № 57.238
Здравствуйте эксперты.
Возник вопрос по тому же чату.
Я не могу понят какой элемент управления используется в той же Mirc для отображения сообщения. Я пробовал Listbox =))) Не подходит.
Я пишу чат на чистом WinAPI и прошу помочь если вы знаете назовите название элемента.
С уважением,
Zmeu.
Отправлен: 30.09.2006, 17:23
Вопрос задал: Tamashev Denis M (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n0name
Здравствуйте, Tamashev Denis M!
Скорее всего вам подойдет RichEdit20A, я писал свой IRC-чат, и этот элемент нормально работал. В RichEdit'e можно изменять цвет написания, делать жирным, почеркнутым текст.
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 30.09.2006, 17:51
Оценка за ответ: 5
Комментарий оценки:
А можно в нём выводит картинки допустим смайлы ?
Или придётся мучатся с рисованием на окне =( ?


Вопрос № 57.243
Уважаемые эксперты, помогите пожалуйста заменить вызов функции malloc оператором new
вызовы такие:
indexes = malloc ((size_t)(n+1)*sizeof(tindex));

lpBits = (LPSTR) malloc (bmImgSize*sizeof (BYTE));

p_gray_palette = (LPLOGPALETTE)malloc((size_t)(sizeof(LOGPALETTE)+
NO_OF_PALETTE_ENTRIES*sizeof(PALETTEENTRY)));

pbmInfoHeader =
(LPBITMAPINFOHEADER)malloc(sizeof(BITMAPINFOHEADER));

pbmInfo = (LPBITMAPINFO)
malloc (PalSize + sizeof(BITMAPINFOHEADER));

описания структур (если нужны) следущие
(взяты из wingdi.h СиБилдера 6.5):

tindex *indexes;
BITMAPFILEHEADER bmFileHeader;
LPBITMAPINFOHEADER pbmInfoHeader;
LPBITMAPINFO pbmInfo;
LPSTR pBits,lpBits;
LPLOGPALETTE p_gray_palette;

typedef struct {
int row,col;
} tindex;

typedef CHAR *LPSTR, *PSTR;

typedef struct tagLOGPALETTE *LPLOGPALETTE;

typedef struct tagLOGPALETTE {
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY palPalEntry[1];
} LOGPALETTE, *PLOGPALETTE, NEAR *NPLOGPALETTE, FAR *LPLOGPALETTE;

typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

typedef struct tagPALETTEENTRY {
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
BYTE peFlags;
} PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY;

typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
и в связи с этим второй вопрос. Как перегрузить malloc оператором new
чтобы корректно преобразовывались типы любых структур
(например таких которые приведены выше) Пожалуйста приведите код
Спасибо
Отправлен: 30.09.2006, 18:46
Вопрос задал: Texnokrat (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: dentist
Здравствуйте, Texnokrat!
ну по всей видимости выглядит это также только вместо malloc мы поставим new.
например вот так:
LPBITMAPINFOHEADER pbmInfoHeader = (LPBITMAPINFOHEADER) new (char[sizeof(BITMAPINFOHEADER)]);

а чем вам функция malloc неугодила? =)
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 4-ый класс)
Ответ отправлен: 02.10.2006, 09:26

Отвечает: Sergey A. Wedensky
Здравствуйте, Texnokrat!

indexes = new tindex[n+1];
lpBits = new BYTE[bmImgSize];
p_gray_palette = (LPLOGPALETTE)new char[sizeof(LOGPALETTE)+NO_OF_PALETTE_ENTRIES*sizeof(PALETTEENTRY)];
// Только удалять нужно так:
// delete (char*)p_gray_palette;
pbmInfoHeader = new BITMAPINFOHEADER;
pbmInfo = (LPBITMAPINFO) new char[PalSize + sizeof(BITMAPINFOHEADER)];
// Опять же удаляем
// delete (char*)pbmInfo
Ответ отправил: Sergey A. Wedensky (статус: 3-ий класс)
Ответ отправлен: 02.10.2006, 10:11


Вопрос № 57.245
доброго времение суток, уважаемые эксперты
У меня возникла такая неприятность.С полем EDIT у меня связана переменная типа int и есть обработчик EN_CHANGE в котором вызывается UpdateData(TRUE), и соответственно когда я стираю все что есть в поле EDIT то выдается ошибка "Please enter an integer", как бы можно было обойти это?
Можно было бы строковую переменную связать с этим полем, но тогда каждый раз при обработке этих данных надо будет переводить их в int или float а потом обратно.
Заранее благодарен
Отправлен: 30.09.2006, 19:04
Вопрос задал: Mefisto (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: NextStep / www2
Здравствуйте, Mefisto!

Перед тем, как преобразовывать строку в число - проверьте не пустая ли она. Если она пустая, тогда присвойте ей значение "0", а затем уже преобразовывайте. Или можете не преобразовывать "0" в 0, а сразу обойти преобразование и присвоить переменной значение 0.
---------
Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: NextStep / www2 (статус: Студент)
Ответ отправлен: 02.10.2006, 12:14

Отвечает: Delph
Здравствуйте, Mefisto!
IMHO, наиболее корректным будет вариант, когда программа считывает информацию со всей формы сразу (например, при нажатии пользователем кнопки "Применить", или что там у Вас определено для этих целей?). Для всех визуальных компонентов чтение (и перекодировка, если необходимо) вызывается именно в этот момент, здесь же идёт отслеживание и обработка ошибок при вводе. На каждое отдельное поле для ввода данных можно навесить проверку корректности вводимой информации (т.е. в числовом поле запретить ввод нечисловой информации, я обычно просто отсекаю недопустимые символы). Вот эту проверку и подвесте на обработчик EN_CHANGE.
Если возникнут вопросы, обращайтесь.
Ответ отправил: Delph (статус: 1-ый класс)
Ответ отправлен: 02.10.2006, 12:24


Вопрос № 57.249
Доброго времени суток!
Уважаемые эксперты, столкнулся с необходимостью нахождения
подкоренного выражения из целого положительного числа большой размерности.
К примеру:
double x = 40353607;
double i = SQR_manual(x); // Должно получиться '7'
// 7^9 = 40353607
С уважением Sergey.
Отправлен: 30.09.2006, 19:38
Вопрос задал: Pep-sergey (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Pep-sergey!
Надо воспользоваться некоторыми математическими знаниями:
a ^ n = exp(n * ln(a))
Корень n-ой степени из a - это a ^ (1/n)
Соотв., корень n-ой степени из a равен exp(ln(a) / n) или, в вашем случае:
double x = 40353607;
double i = exp(ln(x) / 7.0);

Не забудьтен подключиться math.h или stdib.h - используемые функции где-то там находятся.
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 30.09.2006, 21:22

Отвечает: Sergey A. Wedensky
Здравствуйте, Pep-sergey!

Не уверен, что правильно Вас понял, но корень 9 степени из x - это x^(1/9):

double i = pow(x, 1.0/9);
Ответ отправил: Sergey A. Wedensky (статус: 3-ий класс)
Ответ отправлен: 02.10.2006, 10:15


Вопрос № 57.251
Здравствуйте, уважаемые эксперты!
Написал в эту рассылку и в UNIX, так как не знаю, куда мой вопрос относится:)).
Как вы поняли, пишу под FreeBSD на Си. Программа про обработку сигнала по нажатию <Ctrl+c>.
При нажатии должна выводиться Фраза. Так вот, при нажатии на <Ctrl+c> выводится `^CФраза` (перед фразой значок `^C`). Кто-нибудь знает как убрать этот значок? Или это свойство операционной системы?
Отправлен: 30.09.2006, 19:54
Вопрос задал: Стомов Евгений (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Хватов Сергей
Здравствуйте, Стомов Евгений!

Это - свойство драйвера tty. Чтобы от этого избавиться, надо в параметрах tty снять флаг ECHOCTL. Проще всего - с помощью программы stty:
stty -echoctl < /dev/нужный-tty
Програмно это делать несколько муторно, но как это делать, и вообще как работать с терминальными устройствами, описано в http://www.easysw.com/~mike/serial/serial.html (правда, по-английски)
Ответ отправил: Хватов Сергей (статус: 5-ый класс)
Ответ отправлен: 01.10.2006, 19:01


Вопрос № 57.262
Здравствуйте!
Вопос по VCL. Подскажите, пожалуйста, как можно пуолучить указатель на компонент TStringGrid.

на строчку TStringGrid *s;
компилятор пишет
Undrfined Symbol "TStringGrid"
Undrfined Symbol "s"
Отправлен: 30.09.2006, 21:44
Вопрос задал: Svanshe (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Santana
Здравствуйте, Svanshe!
по моему так

TStringGrid* MyGrid = new TStringGrid();
Ответ отправил: Santana (статус: 6-ой класс)
Ответ отправлен: 30.09.2006, 22:32

Отвечает: Sergey A. Wedensky
Здравствуйте, Svanshe!
Подозреваю, что Вы просто не подключили нужный header:
#include <Grids.hpp>
Ответ отправил: Sergey A. Wedensky (статус: 3-ий класс)
Ответ отправлен: 02.10.2006, 10:07


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное