Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: BitBlt  (Прочитано 32083 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« : 22-06-2003 00:45 » 

Цитата
Пробовал :

HANDLE LoadImage(0,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);

Но VC++ 6.0 ругается на нее.
Может этот HANDLE надо получать другим образом?
Помогите пожалуйста.
Спасибо за винимание.


Какую ошибку ты получаешь?
NULL не 0!!!
Проверь путь к файлу - дирректория проекта является корневой , а не дирректория Дебаг..!!

Поподробнее - твой пример - на который ругается твоя студия - рабочий!!!
Записан

А птичку нашу прошу не обижать!!!
SSW
Гость
« Ответ #1 : 22-06-2003 06:27 » 

1.а) Пишу допустим так :
BOOL CDMDlg::OnInitDialog()
{
...

// TODO: Add extra initialization here
   HANDLE LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
...
return TRUE;  // return TRUE  unless you set the focus to a control
}

1.b) А VC++ мне пишет Жаль
D:\project\DM\DMDlg.cpp(135) : error C2078: too many initializers
D:\project\DM\DMDlg.cpp(135) : error C2440: 'initializing' : cannot convert from 'const int' to 'void *'

2. Файл проверил, лежит там где надо.

3. Бес его знает. Пример не мой, я взял его на www.sources.ru из FAQ. Он у меня тоже не работает.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 22-06-2003 12:24 » 

Цитата: SSW
1.а) Пишу допустим так :
BOOL CDMDlg::OnInitDialog()
{
...

// TODO: Add extra initialization here
   HANDLE LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);


...
return TRUE;  // return TRUE  unless you set the focus to a control
}

1.b) А VC++ мне пишет Жаль
D:\project\DM\DMDlg.cpp(135) : error C2078: too many initializers
D:\project\DM\DMDlg.cpp(135) : error C2440: 'initializing' : cannot convert from 'const int' to 'void *'

2. Файл проверил, лежит там где надо.

3. Бес его знает. Пример не мой, я взял его на www.sources.ru из FAQ. Он у меня тоже не работает.



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

HANDLE hBmp;
hBmp = LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);


При этом HANDLE hBmp; должен быть описан как элемент класса CDMDlg иначе доступ к нему юудет только в функции OnInitDialog().
Записан

А птичку нашу прошу не обижать!!!
SSW
Гость
« Ответ #3 : 25-06-2003 05:24 » 

Чето у меня не получается. Жаль
Надо наверное искить другой способ.
Ну да ладно. Всем спасибо!
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #4 : 25-06-2003 11:56 » new

Чего не получается - ты эта - давай рассказывай.
Во первых, для этого мы здесь и сидим.
Во вторых, не может не получаться то, что получается у всех, если все сделать правильно!!!
Записан

А птичку нашу прошу не обижать!!!
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 25-06-2003 11:59 » 

На что плюется?
Ты как я понимаю с MFC  знакомишся, это штучка с норовом и ее еще укратить надо. Зато потом сможешь творить сней что захочишь она все стерпит(код то открытый).
Записан

Да да нет нет все остальное от лукавого.
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #6 : 25-06-2003 13:03 » 

Цитата: SSW
1.а) Пишу допустим так :
BOOL CDMDlg::OnInitDialog()
{
...

// TODO: Add extra initialization here
   HANDLE LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
...
return TRUE;  // return TRUE  unless you set the focus to a control
}
.


Что это за код? Объявление функции внутри другой ф-ции- так нельзя, это же не Pascal.
Далее если используешь MFC а в ней ф-ции из API то ставь перед ними ::, чтобы указать что ф-ция из глобального namespace иначе будет взята ф-ция с тем же именем но из класса, а у них параметров меньше, так как handle им не нужен-он в класе хранится.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #7 : 25-06-2003 13:17 » 

В данном случае он так и использует.
У LoadImage нет такого, как HANDLE параметра она по моему всегда глобальная...
Записан

А птичку нашу прошу не обижать!!!
SSW
Гость
« Ответ #8 : 26-06-2003 06:03 » 

Я знакомлюсь с MFC. И это первая серьезная пробка. Не судите строго (хотя можете и судить). Каждый программист-проффесионал должен пройти путь познания...

Проблема в том, что VC++ вроде компилит, но в момент запуска появляется сообщение:

"Unhandled exception in DM.exe(MFC42D.DLL) . . . "
и открывает файл Afxwin1.inl

Цитата

 ... что захочишь она все стерпит(код то открытый).


А КОД ТАКОЙ : (работает ли он? - незнаю, но рациональное зерно есть)

 Файл  DMDlg.h
. . .
public:
  CRect Rect;
  CDC     m_dcTemp;
  CBitmap m_cBmp;
  UINT    m_iBmpHeight;
  UINT    m_iBmpWidth;  
  HBITMAP m_hBmp;
. . .


Файл DMDlg.cpp
 . . .
BOOL CDMDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  . . .
 
  m_hBmp=(HBITMAP)::LoadImage(0,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
  m_cBmp.Attach(m_hBmp);
  BITMAP Bmp;
  CClientDC dc(this);
  m_dcTemp.CreateCompatibleDC(&dc);
  m_dcTemp.SelectObject(m_cBmp);
  m_cBmp.GetBitmap(&Bmp);
  m_iBmpHeight=Bmp.bmHeight;
  m_iBmpWidth=Bmp.bmWidth;

  CDC* pDC;//-------------
  RECT rect;
  GetClientRect(&rect);
  int CX=rect.right/m_iBmpWidth;
  int CY=rect.bottom/m_iBmpHeight;
  int Y=0;
  for (int i=0;i<=CY;i++)
  {
     int X=0;
     for(int j=0;j<=CX;j++)
     {
      pDC->BitBlt(X,Y,X+m_iBmpWidth,Y+m_iBmpHeight,&m_dcTemp,0,0,SRCCOPY);
      X+=m_iBmpWidth;
      }
      Y+=m_iBmpHeight;
    }

 . . .

 return TRUE;  // return TRUE  unless you set the focus to a control
}
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 26-06-2003 11:49 » 

Я так понимаю ошибка здесь
Код:
m_hBmp=(HBITMAP)LoadImage(0,"1.bmp",IMAGE_BITMAP,0,0,
        LR_LOADFROMFILE|LR_DEFAULTSIZE);
m_cBmp.Attach(m_hBmp);
0 это толко для OEM изображений те которые являются встроеными картинкми винды и грузятся они в адресное пространство винды(иконки и прочие)

Я ползовался не Attach а FromHandle.

Поробуй так
Код:
m_hBmp=(HBITMAP)LoadImage((HINSTANCE)GetCurrentProcess(),
   "1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
m_cBmp.FromHandle)m_hBmp);

Я не помню как средствами MFC  достучаться до HINSTANCE он есть
в CWinApp::m_hInstance но как получить из произволного класса доступ к классу апликации я не помню.
« Последнее редактирование: 14-11-2007 16:37 от Алексей1153++ » Записан

Да да нет нет все остальное от лукавого.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #10 : 26-06-2003 12:31 » 

Мда не успел я Улыбаюсь опередили - Attach приаттачивает объяект по HANDLE а берет внутрь объекта только FromHandle()...
Записан

А птичку нашу прошу не обижать!!!
SSW
Гость
« Ответ #11 : 07-07-2003 22:43 » 

Уу-у-у-ф-ф-ф-ф-х-х-х-х-х-х-!!!!!!! Отлично  Отлично  Отлично
Ну наконец то, а то я уже запарился. ЗАРАБОТАЛО! Отлично
Кому интерестно - делается это так:
Цитата

CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
CBitmap bitmap;
CDC dcMemory;  

HBITMAP  hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),strFileName, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);

if(hBitmap == NULL)
{      
MessageBox("Cannot load this picture!");
return;
}
   
dcMemory.CreateCompatibleDC(&dc);
bitmap.Attach(hBitmap);
dcMemory.SelectObject(&bitmap);    
dc.BitBlt(0,0,rect.right,rect.bottom, &dcMemory, 0, 0, SRCCOPY);




Спасибо всем за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines