Форум: Форум C++Разное
Новые темы: 00
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вывод Bitmap на экран. Windows API.

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

 
 автор: EvgenLog   (24.01.2007 в 23:31)   письмо автору
 
   для: cheops   (24.01.2007 в 23:25)
 

Хм... Работает... Построчно придётся сравнивать, чтобы докапаться до ошибки. Ну да ладно, этим потом займусь, всё равно для разработки справвочника буду пользоваться графическим интерфейсом. Спасбо за помощь!

  Ответить  
 
 автор: cheops   (24.01.2007 в 23:25)   письмо автору
14.9 Кб
 
   для: EvgenLog   (24.01.2007 в 23:20)
 

Держите мой проект...

PS Тема уже достаточно большая наверное нужно бы новую завести для продолжения...

  Ответить  
 
 автор: EvgenLog   (24.01.2007 в 23:20)   письмо автору
 
   для: EvgenLog   (24.01.2007 в 23:10)
 

Опять нет результата. Я вот подумал правилен-ли вот этот код?

switch(iMsg)
{
    case WM_SHOWWINDOW:
    case WM_SIZE:
            hDc = BeginPaint(hWnd, &ps);

DrawBitmap(hDc, bmPicture, 100, 100);
EndPaint(hWnd, &ps);
            return 0;
        case WM_PAINT :
            return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}


Петзольд пишет, что нельзя вот так делать:

case WM_PAINT :
            return 0;

  Ответить  
 
 автор: cheops   (24.01.2007 в 23:16)   письмо автору
 
   для: EvgenLog   (24.01.2007 в 23:10)
 

В самый низ нельзя :), так как программа по сути выполняется в цикле
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Вот так напишите
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

bmPicture = LoadBitmap(wndclass.hInstance, MAKEINTRESOURCE(IDB_BITMAP1));

или просто оставьте в начале, но засобачьте вместо wndclass.hInstance - hInstance, вы же в WinMain() находитесь можете использовать оригинальный дескриптор.

  Ответить  
 
 автор: EvgenLog   (24.01.2007 в 23:10)   письмо автору
 
   для: cheops   (24.01.2007 в 23:06)
 

Ха! Да что ты будешь делать!
Переместил

bmPicture = LoadBitmap(wndclass.hInstance, MAKEINTRESOURCE(IDB_BITMAP2));

В самый низ WinMain(), опять без результата! Может вы мне вышлите код в таком виде, в котором он у вас работает?

  Ответить  
 
 автор: cheops   (24.01.2007 в 23:06)   письмо автору
 
   для: EvgenLog   (24.01.2007 в 23:03)
 

Только сейчас заметил - вы используете wndclass.hInstance в LoadBitmap() до того, как он определён парой строчек ниже... поэтому в качестве первого параметра опять передаётся NULL. Поместите LoadBitmap() ниже в WinMain().

  Ответить  
 
 автор: EvgenLog   (24.01.2007 в 23:03)   письмо автору
1.4 Кб
 
   для: cheops   (24.01.2007 в 23:00)
 

Вот как выглядит файл main.cpp. В архив не включены ресурсы.

  Ответить  
 
 автор: EvgenLog   (24.01.2007 в 23:01)   письмо автору
 
   для: cheops   (24.01.2007 в 22:39)
 

Вобщем нужно помечать перекрываемую область как недействительную и перерисовывать только её?

  Ответить  
 
 автор: cheops   (24.01.2007 в 23:00)   письмо автору
 
   для: EvgenLog   (24.01.2007 в 22:49)
 

Странно - у меня работает - прикрепите файл, в том виде, котором он у вас сейчас.

  Ответить  
 
 автор: cheops   (24.01.2007 в 22:58)   письмо автору
 
   для: EvgenLog   (24.01.2007 в 22:32)
 

В том и дело, что WM_SIZE тоже очень много возникает - нужно перерисовывать только тогда, когда задевается рисунок, причём, если окно только расширяется и задевает изображение.

  Ответить  

Сообщения:  [1-10]    [11-20]   [21-30]  [31-32] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования