Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > загрузка Bitmap-a |
Автор: belphegor 17.3.2007, 17:33 |
Здравствуйте. У меня возникла проблемма и решил попросить помощи у мудрецов. Я только начинаю изучать ВинАпи и мне не очень легко в этом разобраться. Мне нужно выводить в окне картинки, в зависимости от нажатия кнопки. допустим у меня есть 3 картинки и кнопка next, сделать так чтоб при нажатии на кнопку картинки чередовались. единственное что у меня получилось пока это просто загрузить онду картинку в окно. case WM_PAINT: hDC=BeginPaint(hwnd,&PaintStruct); LoadImage(NULL,"4.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); GetObject(hBitmap,sizeof(BITMAP),&Bitmap); hCompatileDC=CreateCompatibleDC(hDC); hOldBitmap=SelectObject(hCompatileDC,hBitmap); GetClientRect(hwnd,&Rect); StretchBlt(hDC,0,0,Rect.right,Rect.bottom,hCompatileDC,0,0,Bitmap.bmWidth,Bitmap.bmHeight,SRCCOPY); SelectObject(hCompatileDC,hOldBitmap); DeleteObject(hBitmap); DeleteDC(hCompatileDC); EndPaint(hwnd,&PaintStruct); return 0; break; а как делать дальше не представляю пока,думаю может ктото сможет мне помочь. В принципе в уме я представляю как это реализовать, но кодом нет. Буду очень благодарен за помощь. Заранее спасибо. |
Автор: GremlinProg 18.3.2007, 00:14 | ||
Создай массив из 3-х битмапов, и индекс текущего битмапа, загрузи, каждый битмап, в пайнте рисуй текущий. Обработай нажатие кнопки, например так:
ID_SWITCH_PIC - идентификатор кнопки Next, установи свое значение. PicId - индекс текущего битмапа. Вот и все. |
Автор: belphegor 18.3.2007, 01:37 |
я сделал так char* str; s="1.bmp"; ........................ case WM_PAINT: hDC=BeginPaint(hwnd,&PaintStruct); LoadImage(NULL, str ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); GetObject(hBitmap,sizeof(BITMAP),&Bitmap); hCompatileDC=CreateCompatibleDC(hDC); hOldBitmap=SelectObject(hCompatileDC,hBitmap); GetClientRect(hwnd,&Rect); StretchBlt(hDC,0,0,Rect.right,Rect.bottom,hCompatileDC,0,0,Bitmap.bmWidth,Bitmap.bmHeight,SRCCOPY); SelectObject(hCompatileDC,hOldBitmap); DeleteObject(hBitmap); DeleteDC(hCompatileDC); EndPaint(hwnd,&PaintStruct); return 0; break; case WM_COMMAND: if((HWND) lparam==b1hwnd) { str="2.bmp"; InvalidateRect(hwnd,0,FALSE);} break; --------------------------------- по идее второй битмап должен заменить первый,но картинка не меняется а остается прежней то что в команде в иф заходит это точно и str="2.bmp" тоже, я проверял только вот не перерисовывается в PAINT |
Автор: belphegor 18.3.2007, 11:22 | ||
я так сделал, странно но при вызове invalidate перерисовывается этот же битмап
|
Автор: GremlinProg 18.3.2007, 20:29 |
str, объявленная в WndProc инициируется на каждое сообщение, вынеси её из процедуры, тогда все будет нормально, только первый раз не забудь её присвоить "3.bmp". |
Автор: belphegor 18.3.2007, 21:54 |
Ок , спасибо я как раз сам допер. |