Консоль и Wm_paint

Тема в разделе "Общие вопросы по С и С++", создана пользователем HerrOberst, 12 дек 2010.

  1. HerrOberst

    HerrOberst Гость

    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 );
    }
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    По этому куску трудно что-либо сказать. Выложи весь код. Ну или хотя бы пришли мне в ICQ.
     
Загрузка...

Поделиться этой страницей