Чтение онлайн

на главную - закладки

Жанры

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

#import <msado15.dll> rename("EOF", "adoEOF")

(подразумевается, что файл craxdrt.tlb находится в одной из стандартных папок для include. Изначально он находится в каталоге C:\Program Files\Seagate Software\Crystal Reports\Developer Files\include\)

так же добавляем следующие строки в начале файла RepSampDlg.cpp

const CLSID CLSID_Application = {0xb4741fd0, 0x45a6, 0x11d1, {0xab, 0xec, 0x00, 0xa0, 0xc9, 0x27, 0x4b, 0x91}};

const IID IID_IApplication = {0x0bac5cf2, 0x44c9, 0x11d1, 0xab, 0xec, 0x00, 0xa0, 0xc9, 0x27, 0x4b, 0x91}};

const CLSID CLSID_ReportObjects = {0xb4741e60, 0x45a6, 0x11d1, 0xab, 0xec, 0x00, 0xa0, 0xc9, 0x27, 0x4b, 0x91}};

const IID IID_IReportObjects = {0x0bac59b2, 0x44c9, 0x11d1, 0xab, 0xec, 0x00, 0xa0, 0xc9, 0x27, 0x4b, 0x91}};

Переходим

к обработчику CRepSampDlg::OnShowWindow. Я обычно создаю стандартное окружение для работы с COM-объектами:

try {} catch(const _com_error& e) {

 _bstr_t bstrSource(e.Source);

 _bstr_t bstrDescription(e.Description);

 CString strError;

 strError.Format("_com_error catched at CRepSampDlg::OnShowWindow\n"

"Source : %s\nDescription : %s", (LPCSTR)bstrSource,(LPCSTR)bstrDescription);

 AfxMessageBox(strError);

}

В try-блоке присоединяем наш файл отчета:

HRESULT hr=S_OK;

IApplicationPtr pApp;

IReportPtr pRep;

hr = CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER, IID_IApplication,

 (void **)&pApp);

if (FAILED(hr)) _com_issue_error(hr);

pRep = pApp->OpenReport(_bstr_t("d:\\projects\\RepSamp\\Report1.rpt"));

m_CRView1.SetReportSource(pRep);

m_CRView1.ViewReport;

Собираем проект, и запускаем. Появится отчет, который в качестве источника данных использует свои настройки по умолчанию. Теперь давайте подставим ему в качестве источника данных необходимый нам Recordset. Я предпочитаю ADO. Следующий код я добавил сразу после строки "HRESULT hr=S_OK;" :

ADODB::_ConnectionPtr pConn;

pConn.CreateInstance(__uuidof(ADODB::Connection));

if (FAILED(hr)) _com_issue_error(hr);

CString sConnStr("Provider=SQLOLEDB.1;"

 "Integrated Security=SSPI;Persist Security Info= False;"

 "Initial Catalog= pubs;Data Source= DATACENTER");

hr = pConn->Open(_bstr_t(sConnStr), _bstr_t(L""), _bstr_t(L""),

ADODB::adConnectUnspecified);

if(FAILED(hr)) _com_issue_error(hr);

ADODB::_RecordsetPtr pRs;

pRs.CreateInstance(__uuidof(ADODB::Recordset));

CString sSQL("SELECT * FROM authors");

pRs->Open(_bstr_t(sSQL), pConn.GetInterfacePtr, ADODB::adOpenDynamic,

 ADODB::adLockOptimistic, ADODB::adCmdText);

if (FAILED(hr)) _com_issue_error(hr);

теперь

запихиваем наш recordset в отчет:

IApplicationPtr pApp;

IReportPtr pRep;

hr = CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER, IID_IApplication,

 (void **) &pApp);

if (FAILED(hr)) _com_issue_error(hr);

pRep = pApp->OpenReport(_bstr_t("d:\\proj\\SampRep\\Report1.rpt"));

m_CRView1.SetReportSource(pRep);

IDatabasePtr pDatabase = 0;

IDatabaseTablesPtr pTables = 0;

IDatabaseTablePtr pTable = 0;

pRep->get_Database((IDatabase**)&pDatabase);

pDatabase->get_Tables((IDatabaseTables**)&pTables);

VARIANT var, var2;

VariantInit(&var);

VariantInit(&var2);

var.vt = VT_DISPATCH;

var.pdispVal = (IDispatch*)pConn;

var2.vt = VT_DISPATCH;

var2.pdispVal = (IDispatch*)pRs->GetActiveCommand;

hr = pDatabase->AddADOCommand(var, var2);

ASSERT(SUCCEEDED(hr));

собираем проект. Всё готово.

ВОПРОС-ОТВЕТ
Как сделать нестандартную кнопку на основе битмапа (без MFC, только WinAPI)?
Автор: Игорь Вартанов

Кнопка не обязательно должна иметь стандартный внешний вид (хотя лично я не нахожу внешний вид стандартной кнопки скучным или "простецким"). Однако для многих разработчиков и пользователей кнопки, имеющие нестандартный вид, выглядят более привлекательными. Поэтому для придания некоего стиля интерфейсу собственных программ можно использовать кнопки, отображающие некий битмап (bitmap – растровое изображение).

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

Windows имеет встроенные механизмы и API, поддерживающие создание кнопок (а также и других контролов), имеющих нестандартный внешний вид. Способ отрисовки внешнего вида контрола зависит от его стиля. В данном случае, стиль, нужный нам – это BS_OWNERDRAW. Из его названия видно, что отрисовку вида кнопки выполняет код пользователя, помещенный в оконную (диалоговую) функцию окна-владельца контрола.

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки