StretchBlt еще раз
От: nut888 Россия  
Дата: 27.09.04 13:58
Оценка:
Я хочу вывести bitmap на кнопке
Использовал фрагменты кода из этого форума


void Cdialog_mesh_rot_2::OnPaint() 
{ CBitmap b, bs; BITMAP b_Info; CDC dcMemS, dcMemD;

    CPaintDC dc(this);
    
 b.LoadBitmap(IDB_BITMAP1); b.GetBitmap(&b_Info);
 CBitmap *b_old=dcMemS.SelectObject(&b);

 CDC *dcButton = mc_button1.GetDC();
 dcMemD.CreateCompatibleDC(dcButton);


 bs.CreateCompatibleBitmap(dcButton, 40, 40);
 CBitmap *bs_old=dcMemD.SelectObject(&bs);
 //dcMemD.FillSolidRect(10, 10, 20, 20, RGB(200, 200, 200));

 dcMemD.SetStretchBltMode(HALFTONE  );
 if(dcMemD.GetDeviceCaps(RASTERCAPS) != RC_STRETCHBLT ) MessageBox("not support");
 dcMemD.StretchBlt(0, 0, 40, 40,   &dcMemS, 0, 0, b_Info.bmWidth, b_Info.bmHeight,   SRCCOPY);

 dcMemS.SelectObject(b_old);
 dcMemD.SelectObject(bs_old);


 mc_button1.SetBitmap(bs);
 mc_button2.SetBitmap(b);
 UpdateWindow();
}


В результате получаю MessageBox("not support");
Я пробовал вместо dcButton другие типы с тем же результатом
Что я делаю неправильно
В результате выполнения я вижу черный квадрат
Картинка уменьшается



27.09.04 20:15: Перенесено из 'C/C++'
Re: StretchBlt еще раз
От: Alglib Россия  
Дата: 27.09.04 18:59
Оценка:
Здравствуйте, nut888, Вы писали:

может быть должно быть не так

dcMemD.GetDeviceCaps(RASTERCAPS) != RC_STRETCHBLT

а как-то вот так:

(RC_STRETCHBLT!=(dcMemD.GetDeviceCaps(RASTERCAPS) & RC_STRETCHBLT))

?

И еще не понятно
n> В результате выполнения я вижу черный квадрат
n> Картинка уменьшается

так картинка то правильно выводится или черный квадрат?
Re[2]: StretchBlt еще раз
От: nut888 Россия  
Дата: 28.09.04 04:41
Оценка:
>(RC_STRETCHBLT!=(dcMemD.GetDeviceCaps(RASTERCAPS) & RC_STRETCHBLT))
Так сообщения о несовместимости не возникает

A>так картинка то правильно выводится или черный квадрат?

Картинка выводится неправильно
Re[3]: StretchBlt еще раз
От: Alglib Россия  
Дата: 28.09.04 15:49
Оценка:
Здравствуйте, nut888, Вы писали:

>>(RC_STRETCHBLT!=(dcMemD.GetDeviceCaps(RASTERCAPS) & RC_STRETCHBLT))

N>Так сообщения о несовместимости не возникает

потому что так правильно

A>>так картинка то правильно выводится или черный квадрат?

N>Картинка выводится неправильно

А система ничего не орет? просто я так и не нашел где ты создаешь контекст dcMemS.
т.е. вот ты его определил как объект оболочку MFC


CDC dcMemS;
//грузим каринку
....
//и уже 
CBitmap *b_old=dcMemS.SelectObject(&b);


это не правильно. Запусти в DEBUG — е по-моему должно заорать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.