2013-07-03 2 views
1

Я могу успешно отображать одно изображение в окне, я не уверен, как отображать два изображения в окне. Я повторил один и тот же код для разностного изображения, но не работал. вот код для отображения одного изображения.Как отобразить два растровых изображения на окне в C

static HBITMAP bmpSource = NULL; 
static HDC hdcSource = NULL; 
PAINTSTRUCT ps; 
HDC hdcDestination; 

//* inside the WndProc() 

    case WM_PAINT: 

    bmpSource = (HBITMAP)LoadImage(NULL,file_path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
    hdcSource = CreateCompatibleDC(GetDC(0)); 
    SelectObject(hdcSource, bmpSource); 
    hdcDestination = BeginPaint(hwnd, &ps); 
    BitBlt(hdcDestination,img_x, img_y, 300, 300, hdcSource, 0, 0, SRCCOPY); 
    EndPaint(hwnd, &ps); 

    breaks; 
    //** 

вот что я делаю, у меня есть опыт работы в окне gui.

 static HBITMAP bmpSource = NULL,bmpSource2 = NULL; 
static HDC hdcSource = NULL,hdcSource2 = NULL; 
PAINTSTRUCT ps; 
HDC hdcDestination; 

//* inside the WndProc() 

    case WM_PAINT: 

    bmpSource = (HBITMAP)LoadImage(NULL,file_path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
    hdcSource = CreateCompatibleDC(GetDC(0)); 
    SelectObject(hdcSource, bmpSource); 
    bmpSource2 = (HBITMAP)LoadImage(NULL,file2_path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
    hdcSource2 = CreateCompatibleDC(GetDC(0)); 
    SelectObject(hdcSource2, bmpSource2); 
    hdcDestination = BeginPaint(hwnd, &ps); 
    BitBlt(hdcDestination,img_x, img_y, 300, 300, hdcSource, 0, 0, SRCCOPY); 
    BitBlt(hdcDestination,img2_x, img2_y, 300, 300, hdcSource2, 0, 0, SRCCOPY); 
    EndPaint(hwnd, &ps); 

    breaks; 
    //** 
+0

Вы не выпускаете DC-файлы, которые вы получаете с помощью 'GetDC', сохраняя/восстанавливая старые растровые изображения при выборе с помощью' SelectObject' и не удаляя DC-файлы, созданные вами с помощью CreateCompatibleDC'. У вас скоро закончится ресурс GDI. –

+0

Если 'img_x' =' img2_x' и 'img_y' =' img2_y', вы увидите только второе изображение, потому что оно будет нарисовано точно по первому. Помимо этого, вы проливаете слишком много ресурсов (см. Комментарий Джонатана выше). –

+0

Кроме того, когда вы говорите _ «его не работает» _, что __exactly__ вы видите? –

ответ

0

Вы не показали нам код, который не работает, поэтому мы не можем сказать вам, что вы сделали неправильно.

Выполняйте всю окраску (то есть звонок (бит) BitBlt) после BeginPaint и до EndPaint. Эти функции должны быть вызваны только один раз, поэтому не дублируйте их.

Смежные вопросы