Загрузка битмапа в Picture Control
void DrawPicture(HWND hWnd)
{
static HANDLE hImage, hOldBitmap;
RECT Rect;
BITMAP Bitmap;
static HDC hDC, hCompatibleDC;
hDC=GetDC(GetDlgItem(hWnd, PIC_SOURCE));
hImage=LoadImage(NULL, FileNAME, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hImage, sizeof(BITMAP), &Bitmap);
hCompatibleDC=CreateCompatibleDC(hDC);
hOldBitmap=SelectObject(hCompatibleDC, hImage);
GetClientRect(GetDlgItem(hWnd, PIC_SOURCE), &Rect);
StretchBlt(hDC, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);
SelectObject(hCompatibleDC, hOldBitmap);
DeleteDC(hCompatibleDC);
DeleteObject(hImage);
ReleaseDC(GetDlgItem(hWnd, PIC_SOURCE), hDC);
}
Все, в общем-то, работает нормально, но когда окно частично или полностью перекрывается, приходится заново загружать картинку, иначе она не отображается. 8( Что делать? Заранее благодарен.
P.S. Вышеописанная функция вызывается при получении сообщения WM_PAINT.
Есть диалоговое окно. В нем Picture Control. Загружаю туда картинку:
void DrawPicture(HWND hWnd)
{
static HANDLE hImage, hOldBitmap;
RECT Rect;
BITMAP Bitmap;
static HDC hDC, hCompatibleDC;
hDC=GetDC(GetDlgItem(hWnd, PIC_SOURCE));
hImage=LoadImage(NULL, FileNAME, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hImage, sizeof(BITMAP), &Bitmap);
hCompatibleDC=CreateCompatibleDC(hDC);
hOldBitmap=SelectObject(hCompatibleDC, hImage);
GetClientRect(GetDlgItem(hWnd, PIC_SOURCE), &Rect);
StretchBlt(hDC, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);
SelectObject(hCompatibleDC, hOldBitmap);
DeleteDC(hCompatibleDC);
DeleteObject(hImage);
ReleaseDC(GetDlgItem(hWnd, PIC_SOURCE), hDC);
}
Все, в общем-то, работает нормально, но когда окно частично или полностью перекрывается, приходится заново загружать картинку, иначе она не отображается. 8( Что делать? Заранее благодарен.
P.S. Вышеописанная функция вызывается при получении сообщения WM_PAINT.
Если под MFC делаешь:
попробуй в OnInitDialog()
CStatic m_bitmap; //переменная для ImageControl
HANDLE hImage = LoadImage( NULL , BitmapFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_bitmap.SetBitmap( (HBITMAP)hImage );
У меня картинка появляется, и не пропадает при перерисовке окна.
если нет, то ничем помочь не могу
Если под MFC делаешь:
попробуй в OnInitDialog()
-------------------------
У меня картинка появляется, и не пропадает при перерисовке окна.
если нет, то ничем помочь не могу
Слушай, OnInitDialog() - это функция не перерисовки, а настройки. Она запускается один раз перед запуском программы(д.окна...):!!!:
А какая из них для перерисовки Я и сам хочу узнать...:-?
Я пользуюсь DoDataExchange(CDataExchange* pDX), хотя это, наверно, неправильно.;)
Класные книги по С++:
http://insertsoft.narod.ru/</a>
<a"]http://anatolix.naumen.ru/[/url]
Слушай, OnInitDialog() - это функция не перерисовки, а настройки. Она запускается один раз перед запуском программы(д.окна...):!!!:
А какая из них для перерисовки Я и сам хочу узнать...:-?
Я пользуюсь DoDataExchange(CDataExchange* pDX), хотя это, наверно, неправильно.;)
Класные книги по С++:
http://insertsoft.narod.ru/</a>
<a"]http://anatolix.naumen.ru/[/url]
Если картинка не изменяется, то грузи ее в OnInitDialog() ( хотя и сам знаешь ), а если меняется, то грузи ее моим способом при необходимости поменять. Если не ошибаюсь, то у меня была такая же задача как и у тебя: в каком-то случае надо загрузить какую-то картинку ( у меня тыкаешь на bmp файле в списке, а прога этот bmp и загружает )