Как отобразить Bmp картинку

Тема в разделе "MS Visual C++", создана пользователем Hokage, 9 янв 2009.

  1. Hokage

    Hokage Гость

    Использую MS Visual Studio 2008.
    На учебе у нас стоит Builder на сколько я знаю и такой вот код работает, но у меня нет.
    Пожалуйста подскажите как вставить BMP картинку без всяких MFC/ATL.
    Файл ресурсов:
    Код (Text):
    MYBP1                 BITMAP                 "bitmap1.bmp"
    Код:
    Код (Text):
    // Вывод растра



    #include <Windows.h>

    LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM,

    LPARAM);

    char szWinName[]="МоеОкно";    // Имя класса окна

    HBITMAP hBit1;                  // Дескриптор растра



    int WINAPI WinMain(HINSTANCE hThisInst,

    HINSTANCE hPrevInst,

    LPSTR lpszArgs,

    int nWinMode)

    {

    HWND hwnd;

    MSG msg;

    WNDCLASS wcl;             // Определить класс окна

    wcl.hInstance=hThisInst;    // Дескриптор приложения

    wcl.lpszClassName=szWinName;// Имя класса окна

    wcl.lpfnWndProc=WindowFunc; // Функция окна

    wcl.style=0;                // Стиль по умолчанию

    wcl.hIcon=LoadIcon(hThisInst,"MYICON"); // Иконка

    wcl.hCursor=LoadCursor(hThisInst,"MYCURSOR");//Курс.

    wcl.lpszMenuName=NULL;                // Без меню

    wcl.cbClsExtra=0;  // Без дополнительной информации

    wcl.cbWndExtra=0;                      

    wcl.hbrBackground=

    (HBRUSH)GetStockObject(WHITE_BRUSH); //Белый фон

    if(!RegisterClass(&wcl)) // Регистрируем класс окна

    return 0;

    hwnd=CreateWindow(szWinName,         // Создать окно

    "Вывод растра",

    WS_OVERLAPPEDWINDOW, // Стиль окна

    CW_USEDEFAULT,   // x-координата

    CW_USEDEFAULT,   // y-координата

    CW_USEDEFAULT,   // Ширина

    CW_USEDEFAULT,   // Высота

    HWND_DESKTOP, // Нет родител. окна

    NULL,            // Нет меню

    hThisInst,// Дескриптор приложения

    NULL); // Нет дополнит. аргументов

    ShowWindow (hwnd, nWinMode);      // Показать окно

    UpdateWindow (hwnd);              // и перерисовать

    hBit1=LoadBitmap(hThisInst,"MYBP1"); // Загр. растр

    while(GetMessage(&msg,NULL,0,0))  // Запустить цикл

    {                         // обработки сообщений

    TranslateMessage(&msg); // Разреш. исп. клавиатуры

    DispatchMessage (&msg); // Вернуть управл. Windows

    }

    return msg.wParam;

    }



    // Следующая функция вызывается операционной

    // системой Windows и получает в качестве

    // параметров сообщения из очереди сообщений

    // данного приложения

    LRESULT CALLBACK WindowFunc(HWND hwnd,

    UINT message,

    WPARAM wParam,

    LPARAM lParam)

    {

    HDC DC;

    HDC memDC;

    switch(message)

    {

    case WM_LBUTTONDOWN:

    MessageBox(hwnd,"123","wooork",MB_OK);

    DC=GetDC(hwnd);             // Получить DC

    memDC=CreateCompatibleDC(DC); // Совместимый DC

    SelectObject(memDC,hBit1);

    BitBlt(DC,LOWORD(lParam),HIWORD(lParam),48,48,

    memDC,0,0,SRCCOPY);  // Вывод растра

    ReleaseDC(hwnd,DC);  // Освободить DC

    DeleteDC(memDC);        // Освободить DC памяти

    break;                                                                                                 

    case WM_DESTROY:         // Завершение программы

    DeleteObject(hBit1); // Удалить растр из памяти

    PostQuitMessage (0);

    break;

    default:

    // Все сообщения, не обрабатываемые в     

    // данной функции, направляются на обработку

    // по умолчанию

    return DefWindowProc(hwnd,message,

    wParam,lParam);

    }

    return 0;

    }
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Если этот код в Билдере работает, то проверьте hBit1 на NULL перед отображением. Скорее всего косяк с ресурсами и картинка просто не загружается.
     
Загрузка...

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