Консоль и Wm_paint

  • Автор темы HerrOberst
  • Дата начала
H

HerrOberst

#1
OC - Windows 7
среда пр. - 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 );
}
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
По этому куску трудно что-либо сказать. Выложи весь код. Ну или хотя бы пришли мне в ICQ.