Удомельский форум

Удомельский форум (http://second.udomlya.ru/uf/index.php)
-   Программирование (http://second.udomlya.ru/uf/forumdisplay.php?f=26)
-   -   Dev cpp не хотят добавляться ресурсы (http://second.udomlya.ru/uf/showthread.php?t=21264)

Daarken 23.09.2011 00:31

Dev cpp не хотят добавляться ресурсы
 
написал программу в VS 2010 но она не работает на компьтерах где нет вижуал студии 10 ,а точнее библиотеки msvcr100.dll.
решил использовать другой компилятор ,выбрал dev-cpp.
исправил программу немного - откомпилировал,она запустилась но изображение в приложении отсутствует и именно из-за того что не подключены изображения.
напрямую LoadImage'ом из какой либо директории открывает нормально
LoadBitmap'ом из ресурсов ни в какую


main.cpp
Код:

#include "Resource.h"


LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);


int nCmdShow=1;
char szWindowClass[ ] = "WindowsApp";
int s=0,j=0,p;
static TCHAR szTitle[] = "!!!";

static HINSTANCE hInst;
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{

    HWND hwnd;             
    MSG messages;           
    WNDCLASSEX wincl;       

 
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szWindowClass;
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_DBLCLKS;               
    wincl.cbSize = sizeof (WNDCLASSEX);

   
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;               
    wincl.cbClsExtra = 0;                     
    wincl.cbWndExtra = 0;                     
    wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

   
    if (!RegisterClassEx (&wincl))
        return 0;

   
for(j;j<=5;j++)
    {
        hwnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,rand()%1000,rand()%700,500, 500,NULL,NULL,hThisInstance,NULL);
   
        s=3;
        ShowWindow(hwnd,nCmdShow);
        UpdateWindow(hwnd);
    }
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

 
    return messages.wParam;
}



LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)               
        {
      case WM_PAINT:
        HBITMAP hBm,old;
        HDC ourDC;
        if(s%2){
            hBm = LoadBitmap(hInst,"IDB_BITMAP1");
            ourDC = CreateCompatibleDC(GetDC(hwnd));
            old = (HBITMAP)SelectObject(ourDC, hBm);
            BitBlt(GetDC(hwnd), 100, 100,271,249, ourDC, 0, 0, SRCCOPY);
        }else{
            hBm= LoadBitmap(hInst,"IDB_BITMAP2");
            ourDC = CreateCompatibleDC(GetDC(hwnd));
            old = (HBITMAP)SelectObject(ourDC, hBm);
            BitBlt(GetDC(hwnd), 100, 100,291,211, ourDC, 0, 0, SRCCOPY);
            }
        break;
    case WM_DESTROY:{s++;
        p=j;
        for(j;j<=p*2;j++)
        {
            hwnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,rand()%1200,rand()%700,500, 500,NULL,NULL,hInst,NULL);
            ShowWindow(hwnd,nCmdShow);   
            UpdateWindow(hwnd);
        }
    }
        default:                     
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


resource.h
Код:

#include "windows.h"
#define IDB_BITMAP1                    100


bitmap.rc
Код:

#include "Resource.h"

IDB_BITMAP1 BITMAP "1.bmp"
IDB_BITMAP2 BITMAP "2.bmp"

подскажите пожалуйста в чем моя кривизна рук

Troll 23.09.2011 09:19

1) При возникновении проблемы менять среду, не есть гуд.

Следовало либо установить на целевой компьютер Microsoft Visual C++ 2010 Redistributable Package. Почти любая программа на с++ использует стандартную библиотеку - c runtime library, которая содержит набор функций, используемых программой. (с)
Чуть менее очевидный способ - статическая компоновка. Заходим в опции проекта, находим там опции компилятора (C/C++ -> Code Generation), и меняем параметр Runtime Library с "Multi Threaded DLL (/MD)" на "Multi Threaded (/MT)". Для отладочной версии программы нужно поменять "Multi Threaded Debug DLL (/MDd)", на "Multi Threaded Debug (/MTd)". После перекомпиляции, несем программу на любую машину и запускаем. (с)

2) Сильно не разбирался, но попробуйте загружать картинку -
Цитата:

LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));

Daarken 23.09.2011 14:52

Цитата:

При возникновении проблемы менять среду, не есть гуд
знаю,но я не знал про статическую компоновку ,потомучто api начал изучать совсем недавно

это прототип программы шутки поэтому не вариант устанавливать библиотеки.
Код:

LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
пробовал уже-не помогает

статическая компоновка помогла,НО на xp программа некорректно работает(нормально отображается только первое окно),нормально не работает даже если библиотеки установить,на семерке все отлично,хотелось бы что работало везде нормально.
странно то что при статическом подключении библиотек размер увеличился всего ~30 кб ,я думал больше будет

Troll 23.09.2011 16:18

Цитата:

Сообщение от Daarken (Сообщение 494303)
знаю,но я не знал про статическую компоновку ,потомучто api начал изучать совсем недавно

это прототип программы шутки поэтому не вариант устанавливать библиотеки.
Код:

LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
пробовал уже-не помогает

статическая компоновка помогла,НО на xp программа некорректно работает(нормально отображается только первое окно),нормально не работает даже если библиотеки установить,на семерке все отлично,хотелось бы что работало везде нормально.
странно то что при статическом подключении библиотек размер увеличился всего ~30 кб ,я думал больше будет

Это были варианты или. Т.е. или установить библиотеку или компоновка.
В чем выражается некорректность отображения окон в XP?

Daarken 23.09.2011 16:48

когда открывается первое окно там почти всегда есть картинка,когда это окно закрывается открываются два ,уже с другой картинкой,которая отображается далеко не при каждом запуске программы,а если закрыть одно из этих двух окон то появятся просто 4 пустых окна ,а если еще и подвигать одно из окон программы то пол экрана вообще перекрывается белым цветом

попытался скрин сделать
первый раз получилось нечто-всё черное кроме букв диспетчера задач,и больше вообще ничего на скрине нет
второй раз пэйнт мне написал про переполнение буфера

Troll 23.09.2011 18:09

Зацикливается на перерисовке последнего отображенного окна.

Daarken 23.09.2011 18:27

ооо спасибо большое!
добавил бегинпайнт и эндпайнт все стало просто замечательно!:yahoo:


Текущее время: 14:05. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot