
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
Хочу нарисовать Bitmap на экране.
Пишу: LoadImage(NULL, (LPCTSTR )"b.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); Проблема в том, что на десктопе флан LR_LOADFROMFILE, а для PocketPC нельзя, то есть можно bitmap грузить только из ресурсов. Как прочитать bitmap из файловой системы? |
Сообщ.
#2
,
|
|
|
а ты на чем пишешь?
|
Сообщ.
#3
,
|
|
|
EVC++ 4.0
SDK - самое последнее |
Сообщ.
#4
,
|
|
|
SHLoadDIBitmap()
|
Сообщ.
#5
,
|
|
|
Спасибо.
Только не ясно, зачем у одной ф-ции убавили функциональности, чтобы сделать другую ф-цию... |
Сообщ.
#6
,
|
|
|
Мне тоже было интересно, но msdn об этом умалчивает
![]() |
Сообщ.
#7
,
|
|
|
А как потом на экран bitmap вывести. Следующий фрагмент дает кривой-косой рисунок:
![]() ![]() CPaintDC dc(this); // device context for painting { CBitmap bmp; HANDLE hBitmap = SHLoadDIBitmap(name); BITMAP Bitmap; GetObject(hBitmap, sizeof(BITMAP), &Bitmap); bmp.CreateBitmapIndirect(&Bitmap); CDC mdc; mdc.CreateCompatibleDC(&dc); mdc.SelectObject(&bmp); dc.BitBlt(0, 0, Bitmap.bmWidth, Bitmap.bmHeight, &mdc, 0, 0, SRCCOPY); } В методах CBitmap ф-ции аналогичной SHLoadDIBitmap я не нашел, а насколько я понимаю, применять в MFC проге winapi paint нельзя Добавлено Правда если применять winapi, то все рисуется, но только один раз - в смысле нельзя потом еще один bitmap дорисовать. |
Сообщ.
#8
,
|
|
|
Цитата peter788, 18.10.04, 22:26 ...в смысле нельзя потом еще один bitmap дорисовать. В смысле, поподробнее объясни что и куда дорисовывать нужно? ![]() ЗЫ. Я даже в МФЦшных проектах рисую апишными функциями... |
Сообщ.
#9
,
|
|
|
Я делал так: в методе OnPaint CDialog'а писал ::beginpaint(...)
, потом стандартный код рисования bitmap, потом ::endpaint(). При этом bitmap нормально рисовался, но потом почему-то при перерисовке того же самого диалога с другим bitmap'ом он почему-то не рисуется (вроде там еще наблюдался эффект, который я позже опишу, точно не помню). Потом я поставил два biginpaint'а подряд. После этого bitmap'ы стали номально рисоваться, только возникли глюки иного рода - при свертывании выпадающего из комбобокса списка он не стирался с экрана. К идее, что виноваты вызовы winapi-функций я так пришел. Насколько я понимаю, mfc сама как-то вызывает beginpaint при входе в OnPaint. Пытался использовать hdc, спятанный в глубинх CPaintDC - тоже ничего не вышло - делал я это так: CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here HDC hDC, hCompatibleDC; PAINTSTRUCT PaintStruct; HANDLE hBitmap, hOldBitmap; RECT Rect; BITMAP Bitmap; //hDC = ::BeginPaint(m_hWnd, &PaintStruct); //hDC = ::BeginPaint(m_hWnd, &PaintStruct); hDC = dc.m_ps.hdc; hBitmap = SHLoadDIBitmap(sBuf); GetObject(hBitmap, sizeof(BITMAP), &Bitmap); hCompatibleDC = CreateCompatibleDC(hDC); hOldBitmap = SelectObject(hCompatibleDC, hBitmap); ::GetClientRect(m_hWnd, &Rect); StretchBlt(hDC, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY); SelectObject(hCompatibleDC, hOldBitmap); DeleteObject(hBitmap); DeleteDC(hCompatibleDC); //::EndPaint(m_hWnd, &PaintStruct); - битмап не перерисовываетя |
Сообщ.
#10
,
|
|
|
подскажите литературу по загрузке bmp файлов где можно найти??? Срочно надо!!!!
![]() |