Поиск:

Ответ в темуСоздание новой темы Создание опроса
> форма на MSVC++ 6.0, с чего начать? 
:(
    Опции темы
eugeniy
Дата 28.4.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Цитата(Albor @ 27.4.2010,  21:13)
Есть элемент в тулбоксе, называется Picture Control. В его свойствах определи тип "иконка" или "битмап"(что нужно) и размещай в нём картинку.

Это то я уже сделал (битмап), а какие классы, методы нужны для работы с картинкой?
Просто с текстом был гемор полный, а тут по моему, как я полагаю, всё ещё хуже обстоит(

PM MAIL WWW   Вверх
Albor
Дата 28.4.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



У CStatic (именно такого типа будет переменная для Picture Control, только не забудь изменить идентификатор для картинки, а то не сможешь добавить переменную)  есть ф-ция SetBitmap(). Понадобится CBitmap. Как получить CBitmap из данных в твоей базе не подскажу - не знаю. Думаю что не сложнее, чем со строками.
PM MAIL ICQ   Вверх
eugeniy
Дата 28.4.2010, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Цитата(Albor @ 28.4.2010,  15:32)
У CStatic (именно такого типа будет переменная для Picture Control, только не забудь изменить идентификатор для картинки, а то не сможешь добавить переменную)  есть ф-ция SetBitmap(). Понадобится CBitmap. Как получить CBitmap из данных в твоей базе не подскажу - не знаю. Думаю что не сложнее, чем со строками.

Поменял ID картинки, на IDC_PHOTO, сделал переменную типа CStatic.

А как этими SetBitmap и CBitmap пользоваться?
Например, если просто тупо из файла вставить картинку в диалог?
PM MAIL WWW   Вверх
eugeniy
Дата 29.4.2010, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Я так понял, если делаешь Bitmap тип, то только можно работать с картинками формата bmp?
Других вариантов не остаётся? А как же jpg, gif, png???
PM MAIL WWW   Вверх
eugeniy
Дата 4.5.2010, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



поработал с классом CBitmap, там только две функции поюзал, это LoadBitmap и SetBitmap, получается и вправду этот класс может работать только с картинками формата bmp.
А если у меня на фтп-сервере картинки в jpg и png хранятся, то как тогда тут быть? Получается какие-то сторонние библиотеки нужно подключать?
PM MAIL WWW   Вверх
eugeniy
Дата 7.5.2010, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Albor, вы где?
Какими средствами можно обойтись в mfc для решения данной проблемы?
Может есть уже готовое решение, и велосипед не нужно изобретать?
PM MAIL WWW   Вверх
Albor
Дата 7.5.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



В MFC, по-моему нет, во всяком случае я не знаю. Не найду никак ссылку, автор - Виталий Рычков (WinMain), показывал как это можно сделать, по-моему, используя ATL. Найду ссылку на статью разве что, а так помочь не могу. 
PM MAIL ICQ   Вверх
eugeniy
Дата 10.5.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Albor, вы где?
Какими средствами можно обойтись в mfc для решения данной проблемы?
Может есть уже готовое решение, и велосипед не нужно изобретать?
PM MAIL WWW   Вверх
Albor
Дата 11.5.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Смотри пример здесь. В коде найдёшь как загрузить разные типы картинок.
PM MAIL ICQ   Вверх
eugeniy
Дата 14.5.2010, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Цитата(Albor @ 11.5.2010,  12:32)
Смотри пример здесь. В коде найдёшь как загрузить разные типы картинок.

Спасибо за ссылочку.
Вообщем сделал я по этому примеру вывод картинки.
Там во-первых этот класс CPicture работает только с bmp, gif, jpeg, а png не поддерживает, что уже мне не подходит.
Во-вторых мне удалось вывести картинку жпег прямо на диалоге, используя функцию BOOL OnEraseBkgnd(CDC* pDC).
в элемент picture  control, так и не удалось вывести(

поработал с классом CImage, он уже со всеми форматами умеет работать)
вот кусок кода, отвечающий за загрузку картинки и вывод её в элемент picture control.
Код

CStatic m_photo;
CImage image;
image.Load("670.jpg");

HBITMAP hbmp=m_photo.GetBitmap();
CBitmap* bmp=CBitmap::FromHandle(hbmp);
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap* old=dc.SelectObject(bmp);
m_photo=SetBitmap(image);

int x=0; 
int y=0;

image.AlphaBlend(dc,x,y,0xff,AC_SRC_OVER);

dc.SelectObject(old);

m_photo.Invalidate();



но он мне рисует только рамку картинки исходных размеров, а саму картинку в диалоге не прорисовывает, делал в OnInitDialog.
не знаю почему, уже всё перепробывал(

Потом сделал в функции BOOL OnEraseBkgnd(CDC* pDC). На что он мне вывел картинку исходных размеров, но при этом убрал задний фон(
Как мне теперь сжать картинку до нужных мне размеров? и вернуть на место задний фон?

прилагаю два скрина, один - результат работы BOOL OnEraseBkgnd(CDC* pDC), а второй - как должно быть.

http://ifolder.ru/17699882

PM MAIL WWW   Вверх
Albor
Дата 14.5.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(eugeniy @  14.5.2010,  02:18 Найти цитируемый пост)
Как мне теперь сжать картинку до нужных мне размеров? и вернуть на место задний фон?

Попробуй использовать другой вариант функции вывода 
Код

BOOL AlphaBlend(
   HDC hDestDC,
   int xDest,
   int yDest,
   int nDestWidth,
   int nDestHeight,
   int xSrc,
   int ySrc,
   int nSrcWidth,
   int nSrcHeight,
   BYTE bSrcAlpha = 0xff,
   BYTE bBlendOp = AC_SRC_OVER 
);


PM MAIL ICQ   Вверх
Albor
Дата 14.5.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(eugeniy @  14.5.2010,  02:18 Найти цитируемый пост)
но он мне рисует только рамку картинки исходных размеров, а саму картинку в диалоге не прорисовывает, делал в OnInitDialog.

А объект CImage создавался в OnInitDialog? Если да, то объяви его как член класса диалог. А так - это временный объект, уничтожаемый по завершению OnInitDialog.
m_photo=SetBitmap(image); не правильно
m_photo.SetBitmap((HBITMAP)image); так должно быть

Это сообщение отредактировал(а) Albor - 14.5.2010, 11:02
PM MAIL ICQ   Вверх
eugeniy
Дата 15.5.2010, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Цитата(Albor @ 14.5.2010,  09:27)
Цитата(eugeniy @  14.5.2010,  02:18 Найти цитируемый пост)
Как мне теперь сжать картинку до нужных мне размеров? и вернуть на место задний фон?

Попробуй использовать другой вариант функции вывода 
Код

BOOL AlphaBlend(
   HDC hDestDC,
   int xDest,
   int yDest,
   int nDestWidth,
   int nDestHeight,
   int xSrc,
   int ySrc,
   int nSrcWidth,
   int nSrcHeight,
   BYTE bSrcAlpha = 0xff,
   BYTE bBlendOp = AC_SRC_OVER 
);


немного не понял как её прикрутить(AlphaBlend), так что ли?

Код

CImage image;
image.Load("670.jpg");
int w = image.GetWidth();
int h = image.GetHeight();

..........


image.AlphaBlend(dc,100,100,200,200,100,100,w,h,0xff,AC_SRC_OVER);

........


всё это в функции OnInitDialog.

Добавлено через 5 минут и 12 секунд
Цитата
А объект CImage создавался в OnInitDialog? 

Да создавался в OnInitDialog

Цитата
Если да, то объяви его как член класса диалог.

Всмысле в хэдере? если да, то объявил вот так
Код

class CReaderDlg : public CDialog
{
public:
CImage image;




PM MAIL WWW   Вверх
Albor
Дата 17.5.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Вот обещанная ссылка на статью. Там же можно скачать пример с использованием MFC.
PM MAIL ICQ   Вверх
eugeniy
Дата 17.5.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 23.3.2010
Где: Петрозаводск

Репутация: нет
Всего: нет



Цитата(Albor @ 17.5.2010,  17:42)
Вот обещанная ссылка на статью. Там же можно скачать пример с использованием MFC.

Уже сделал с использование класса CImage.
Получилось примерно так.
Код
BOOL CReaderDlg::OnEraseBkgnd(CDC* pDC)
{    
    // draw back ground

    CRect rect;
    GetClientRect(&rect);
    CBrush brush;
    DWORD color = GetSysColor(COLOR_3DFACE);
    brush.CreateSolidBrush(color);
    pDC->FillRect(&rect,&brush);

    CImage image,image2;
    image.Load("228.png");
    int w = image.GetWidth();
       int h = image.GetHeight();     
    int tnh=200;
    int tnw=200*w/h;
    int bpp=image.GetBPP();
    image2.Create(tnw,tnh,bpp);
    HDC h2=image2.GetDC();
    SetStretchBltMode(h2,HALFTONE);
    image.StretchBlt(h2,0,0,tnw,tnh,SRCCOPY);
    image2.ReleaseDC();
    HBITMAP        hbmp = m_photo.GetBitmap();
    CBitmap       *bmp = CBitmap::FromHandle(hbmp);
    CDC            dc;
    dc.CreateCompatibleDC(NULL);
    CBitmap*    old = dc.SelectObject(bmp);
    m_photo.SetBitmap((HBITMAP)image2);
    dc.SelectObject(old);
    m_photo.Invalidate();    

    return TRUE;    
}


только вот не пойму как такое проделать.
А если у меня вот такая ситуация. есть переменная CString Foto, переменная Foto в свою очередь присваивается каждый раз значение row[20] (результат выборки из таблицы БД Mysql), в которой хранится, например, 1.jpg

т.е. получается Foto = 1.jpg
Как мне в функции загрузки картинки прописать параметр?
Image.Load(LPCTSTR(Foto)) и Image.Load(Foto(GetBuffer())) пробовал не работает, падает с ошибкой.(((

PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0977 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.