H
HerrOberst
OC - Windows 7
среда пр. - code::blocks
компилятор - MimGW
язык - C
Консольное приложение, в коде приведен метод drawBMP() выводящий на экран консоли изображение. Однако при перекрытии экрана кансоли и т.д. изображение исчезает. Думал перехватить сообщение widows WM_PAINT и обработать его, однако не могу получить не одного сообщения вообще. Чего только не пробовал....( Помогите разобраться, мож еще потом кому пригодится...
Далее приведен тестовый вариант, если хоть он запашет - можно будет его и красивше оформить..
среда пр. - code::blocks
компилятор - MimGW
язык - C
Консольное приложение, в коде приведен метод drawBMP() выводящий на экран консоли изображение. Однако при перекрытии экрана кансоли и т.д. изображение исчезает. Думал перехватить сообщение widows WM_PAINT и обработать его, однако не могу получить не одного сообщения вообще. Чего только не пробовал....( Помогите разобраться, мож еще потом кому пригодится...
Далее приведен тестовый вариант, если хоть он запашет - можно будет его и красивше оформить..
C++:
#include <stdio.h>
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <wingdi.h>
// Прототипы
void drawBMP(char sFile[]); // Выводит на экран растровое изображение
HWND hwnd = NULL; // Дескриптор консольного окна
HDC hdc = NULL; // Контекст дисплея
RECT rect; // Извлеч координаты рабочей области окна.
//------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
//------------------------------------------------------------
// Вывод на экран растрового изображения
void drawBMP(char sFile[])
{
// Тута все пашет как часы, загружает BMP файл и парсит его по полной...
// Получить Handle консольного окна
hwnd = GetConsoleWindow();
// Считывает контекст дисплея
hdc = GetDC(hwnd);
// Извлеч координаты рабочей области окна.
GetClientRect(hwnd, &rect);
// Вывод растрового изображения
for (i=0; i<bih.biHeight; i++)
{
for (int k=0; k<bih.biWidth; k++)
{
SetPixel(hdc, k + 100, i + 100,
RGB(palette[raster[i][k]].rgbRed,
palette[raster[i][k]].rgbGreen,
palette[raster[i][k]].rgbBlue));
}
}
//----------------------------------------------------------
UpdateWindow( hwnd );
MSG msg;
while ( GetMessage( &msg, hwnd, 0, 0) )
{
printf("Ура хоть одно сообщение!!\n");
printf("%s/n",&msg.message);
TranslateMessage( &msg );
DispatchMessage ( &msg );
}
//----------------------------------------------------------
}
}
}
}
else printf("# not found correct image: %s\n",sFile);
fclose(fp);
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg )
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
{
Rectangle(hdc, rect.right/2 - 5, rect.bottom/2 - 5, rect.right/2 + 5, rect.bottom/2 + 5 );
ReleaseDC(hwnd, hdc);
break;
}
default:
return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
}