...
b.LoadBitmap(IDB_BITMAP1);
...
Работа с изображением .bmp
Подсказали что с помощью класса CBitmap
CBitmap mypic;
mypic.LoadBitmap("C:\\1.bmp");
.... а дальше как вывести?
1.Импортируешь в ресурсы bitmap.
2.Добавляешь в класс диалога переменную CBitmap b;
3.В ф-ии OnInitDialog загружаешь
Код:
4.В ф-ии OnPaint дописываешь
Код:
...
else
{
CDC *pDC = GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(&b);
BITMAP bm;
b.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
CDialog::OnPaint();
}
...
else
{
CDC *pDC = GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(&b);
BITMAP bm;
b.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
CDialog::OnPaint();
}
...
Для однодокументного приложения
1.Добавляешь в класс вида(View) переменную CBitmap b;
2.В ф-ии OnDraw(CDC* pDC) дописываешь
Код:
...
b.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(&b);
BITMAP bm;
b.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
...
b.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = MemDC.SelectObject(&b);
BITMAP bm;
b.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
...
У меня нету класса View как и OnDraw функции. Её надо перегружать?
Если не тяжело можно ещё чуток подробнее.
У меня цель - чтобы кликая на экране в точку туда загружался рисунок ..
Какой проект ? MFC Application ?
Неа. Просто Win32 Application...
Цитата: 4elove4ek
...
У меня цель - чтобы кликая на экране в точку туда загружался рисунок ..
У меня цель - чтобы кликая на экране в точку туда загружался рисунок ..
Может эту задачу лучше спрашивать в ветке Win32 API.Могу в общем случае рассказать,как загрузить рисунок.
1.Добавляешь переменную HBITMAP b; это там где Global Variables:
2.В ф-ии _tWinMain допиши после LoadString...перед MyRegisterClass(hInstance);
Код:
...
b = (HBITMAP)::LoadImage(hInstance,
MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR);
...
b = (HBITMAP)::LoadImage(hInstance,
MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR);
...
3.В ф-ии WndProc добавь переменную HDC hdcBits; перед switch,далее
case WM_PAINT: выглядит так
Код:
...
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
hdcBits=::CreateCompatibleDC(hdc);
SelectObject(hdcBits, b);
BitBlt(hdc, 0, 0, 200, 200, hdcBits, 0, 0, SRCCOPY);
DeleteDC(hdcBits);
EndPaint(hWnd, &ps);
break;
...
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
hdcBits=::CreateCompatibleDC(hdc);
SelectObject(hdcBits, b);
BitBlt(hdc, 0, 0, 200, 200, hdcBits, 0, 0, SRCCOPY);
DeleteDC(hdcBits);
EndPaint(hWnd, &ps);
break;
...
Рисунок надо импортровать в ресурсы.
Я пишу в Visual C++ 6, создаю проект так: http://www.firststeps.ru/mfc/steps/r.php?1 . Выбирая Win32 Application.
И у меня нет функции WndProc...
Заранее спасибо..
У меня один вопрос остался:
как контролировать нажатие нескольких клавиш?
МЫ используем для контроля например персонажа в игре 4 клавиши, но т.к. можно зажать одновременно две, то добавляется ещё 4 направления движения. Подскажите как это сделать...
И когда я обновляю экран ( я это делаю 25 раз в секунду ) то он нейвероятно сильно мерцает!!! Можно как-то избавится от мерцания?
2. Отрисовывать сначала все в памяти, а потом выводить на экран.