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

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Выпуск № 5


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

C/C++ Вопрос-Ответ

Выпуск № 5
Cайт : SoftMaker.com.ru
Архив рассылки : SoftMaker.com.ru
Количество подписчиков : 169
В этом выпуске
От ведущего

Здравствуйте уважаемые подписчики !

Сегодня всего одна новость (но какая !) - рассылку перевели в категорию СЕРЕБРЯНЫХ (!!!). Что особо радует - служба поддержки совершила перевод по собственной инициативе (я не подавал заявки на перевод). Это означает лишь одно - рассылка развивалась наиболее динамично среди других рассылок бронзовой секции каталога.

В связи с этим, надеюсь, произойдет резкий скачок числа подписчиков, что, конечно же, особо благоприятно скажется на информативности выпусков и информационной насыщенности нашего общения.

В любом случае - поздравляю с этим событием всех подписчиков !

Напоминаю, что, как всегда, Вы можете отправить свои пожелания по поводу рассылки и сайта по этому адресу.
Если вы хотите создать и вести какой либо раздел в этой рассылке - также пишите мне.

С уважением, Вахтуров Виктор.

Подписчикам

Чтобы заранее разрешить возможные недоразумения, прошу Вас помнить, что вопросы публикуются в рассылке только один раз. Поэтому, если Вам не ответили в этом выпуске, или ваш вопрос не был опубликован, пришлите его еще раз. Не стоит отвечать на вопрос, который был задан в предыдущем выпуске (за исключением случая, когда он снова опубликован в этом).

Для того, чтобы задать свой вопрос, пришлите письмо, кликнув по этой ссылке.
Для того, чтобы ответить на вопрос, надо кликнуть по ссылке "ответить", расположенной под текстом вопроса.
Обо всех ошибках, замеченных в данной рассылке, а также своих предложениях и пожеланиях пишите сюда.

Вопросы

Для того, чтобы задать свой вопрос, кликните этой ссылке (вопрос будет опубликован в следующем номере).
Вы можете задавать любые вопросы, касающиеся программирования на языке C и C++. Это могут быть вопросы, касающиеся как конструкций языка, применения библиотек классов, шаблонов (таких как MFC или STL), использования компиляторов, так и самой философии программирования на C или C++. Здесь нет ограничений - спрашивайте и получайте ответы.

Вопрос № 14 ( Vladimir Vetlugin )

Добрый день!

Очень удобная штука - закладки для настройки каких либо параметров
программы, появляющиеся при выборе пункта меню "Свойства" иконки,
например IE6.
А как добавить новые закладки к стандартным для своей программы?
или вообще заменить вид этого пункта меню?
С builder 5.0.

С уважением, Владимир

Ответить на вопрос

Вопрос № 15 ( MustDie )

В файле main.h нада определить с помощью ключевого слова class объект Person.
Данные объекта:
Номер человека (целый тип)
ФИО (символьный массив )
Пол (логический тип: 0-муж., 1-жен.)
Возраст (вещественный тип)
Данные должны иметь закрытый уровень доступа (private).

Спасибо за внимание.

Ответить на вопрос

Вопрос № 16 ( Belgaz )

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

Вы не подскажите где мне можно взять документацию по MFC, ODBC, DAO

И если можно вышлите мне несколько примеров по добавлению и изменению
записей в таблице БД через проект MFC.

Ответить на вопрос

Ответы

Ниже приведены вопросы предыдущего выпуска и ответы на них.

Вопрос № 11 ( Виктор )

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

вчера подписался, а сегодня уже можно задать вопрос. Это хорошо.
Подскажите, как можно иннициализировать PIDL, чтобы при
открытии диалогового окна (для работы с папками на основе
структуры BROWSINFO) оно открывалось не с рабочего стола, а
с нужной мне папки.

Ответ ( 3V )

Все достаточно просто, вобщем. Надо определить функцию обратного вызова для обработки уведомлений диалога выбора каталога. И при инициализации диалога (придет сообщение BFFM_INITIALIZED), задать диалогу начальную папку (послав ему BFFM_SETSELECTION).

Просто приведу код (даже примерчик небольшой набросал):

#include <shlobj.h>
#include <objbase.h>

INT CALLBACK BrowseCallbackProc(HWND hwnd,
                                UINT uMsg,
                                LPARAM lp,
                                LPARAM pData)
{
        if(uMsg == BFFM_INITIALIZED)
                SendMessage(hwnd, BFFM_SETSELECTION,
                            TRUE, (LPARAM) "c:\\");

        return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

        ::CoInitialize(NULL);

        LPMALLOC pMalloc;

        if(SUCCEEDED(SHGetMalloc(&pMalloc)))
        {
                BROWSEINFO      bi;

                TCHAR           szDispName[MAX_PATH];
                LPITEMIDLIST    pidl;

                szDispName[0] = '\0';
                RtlZeroMemory(&bi, sizeof(bi));

                bi.ulFlags = BIF_EDITBOX | BIF_VALIDATE |
                             BIF_RETURNONLYFSDIRS;
                bi.lpszTitle = TEXT("Sample");
                bi.pszDisplayName = szDispName;
                bi.lpfn = BrowseCallbackProc;

                pidl = SHBrowseForFolder(&bi);

                if(pidl)
                {
                        // тут чего то сделать
                        pMalloc->Free(pidl);
                }

                pMalloc->Release();
        }

        ::CoUninitialize();

        return 0;
}

Как понятно из кода, обзор папок начнется с корня диска C: .
Вопрос № 12 ( Denis Kravtsoff )

Glad to greet, q!

Довольно идиотский вопрос, но он меня взволновал 8).
Пишем мы некий хидер:

 --- xyz.h ---
  
 #ifndef _XYZ_H_
 #define _XYZ_H_

 class CXYZ
 {
 ...
 }xyz_instance;
  
 #endif
 //---xyz.h

 Потом делаем ещё несколько хидеров:

 --- x.h ---

 #include "xyz.h"
 ...
  
 //--- x.h ---
  
 --- y.h ---

 #include "x.h"
 #include "xyz.h"
 ...
  
 //--- y.h ---

Всё компилируется, но при линковке вылезает что-то вроде:
"Предупреждение линковщика: xyz_instance уже определен в x.obj".
Даже в стандарте немного полазал, да видимо терпения не хватило.
xyz_instance, как я понимаю, статический для всех кто его увидит.
Разве препроцессор не должен был пропустить содержимое xyz.h при его
вложении в y.h после x.h? Заранее благодарен за ответ.

Ответ ( _ser_oviont )

x.h содержит #include xyz.h, а значит и объявление xyz_instance
y.h тоже содержит #include x.h, кот. содержит #include xyz.h, в
котором происходит объявление xyz_incstace.
если x.h и y.h подключаются к разным *.cpp-файлам, то и набор
#define'ов у них независимый, т.к. КОМПИЛИРУЮТСЯ они отдельно.
другое дело -- файл y.h -- там действительно второй раз глобальная
переменная xyz_include не должна объявляться -- @ifndef не пропустит
Вопрос № 13 ( Жариков Игорь )

Приветствую

Microsoft Visual C++ 5.0. Имеется класс с закрытыми данными типа
int, открытая функция возвращающая закрытую переменную типа
int. Функция также возвращает тип int, но при присвоении
возвращаемого функцией значения переменной типа Int в процессе
компиляции компилятор выдает ошибку: говорит что не может
произвести изменение типа данных с int(void) на int. В чем дело?

Ответ ( _ser_oviont )

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

Ответ ( 3V )

Единственное предположение (ну не телепаты мы :) ) - ты делаешь что то типа этого:

 int func()
 ...

 int n = func; // то есть - именно так, без параметров.

Тогда именно такая ошибка и появится.
Всего доброго. До встречи в следующем номере.
Любой из материалов, опубликованных в этой рассылке, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Отписаться

В избранное