16.10.2018, 03:41 [+3 UTC]
в нашей команде: 3 010 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.51 (29.09.2018)

Общие новости:
24.09.2018, 16:49

Форум:
14.10.2018, 19:20

Последний вопрос:
15.10.2018, 22:12

Последний ответ:
15.10.2018, 14:45

Последняя рассылка:
15.10.2018, 19:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
23.01.2010, 15:23 »
andreww
Отличный ответ! Большое спаибо! [вопрос № 176223, ответ № 258871]
25.05.2010, 21:34 »
EMV
Спасибо, c помощью Super я перекодировал AVC видеофайлы в AVI. [вопрос № 178628, ответ № 261642]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 131
solowey
Статус: Студент
Рейтинг: 71
Андрей Кузнецов aka Dr_Andrew
Статус: Старший модератор
Рейтинг: 23

Перейти к консультации №:
 

Консультация онлайн # 140589
Раздел: • С / С++
Автор вопроса: Zombi-6
Отправлена: 23.07.2008, 21:01
Поступило ответов: 1

Уважаемые эксперты! Есть вопрос по Win32 API. Я написал программу для загрузки и воспроизведения битового образа. Я все вроде делал правильно,но картинка не изображается на экране. В то же время когда я прописываю путь к другому файлу,все работает нормально. Что в коде не так? (путь к файлу прописан верно! Так что дело не в указании неверного пути к файлу). При реализации использовался VS 2008,ОС Windows Vista x64.
Еще у меня есть вопросы:
1. Как в Win32 обрабатывать графические файлы формата JPG или каких-либо других не BMP-шных форматов?
2. Как сделть в данной проге так, чтбы через полосы прокрутки можно было
(как реализовать просмотр картинки через полосы прокрутки,как ее пролистывать?)

Приложение:

Поправлено из мини-форума.
--------

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 28.07.2008, 13:42

Состояние: Консультация закрыта

Ответ # 226610 от Fenixk19

Здравствуйте, Zombi-6!
Отвечу только на вопрос 1.
Лучшим выходом из ситуации, чтобы не изобретать велосипедов, будет использование сторонней библиотеки, например libpng, libjpg или, что еще проще, использовать связку библиотек SDL и SDL_Image(найти все это можно запросто в google). Кстати, вывод битового образа можно сделать тоже через эту библиотеку. Там все довольно просто, почитайте документацию и вот этот гайд руководство : http://lazyfoo.net/SDL_tutorials/index.php (там уроки 2 и 3).

Использование "жаргонизмов" не поощряется.
--------

• Отредактировал: Вадим Исаев ака sir Henry (Старший модератор)
• Дата редактирования: 28.07.2008, 13:38


Консультировал: Fenixk19
Дата отправки: 24.07.2008, 02:14

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 140589

Посетитель

ID: 219465

# 1

= общий = | 24.07.2008, 12:10 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

И все-таки,как быть с программным кодом вывода изображения? Я присылал его во вложении,но он,видимо не воспроизвелся. Вот он:
#include "windows.h"
#include "windowsx.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst; // current instance

// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void Destroy();



int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{


// TODO: Place code here.
MSG msg;

MyRegisterClass(hInstance);
InitInstance(hInstance,nCmdShow);

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);

}


return (int) msg.wParam;
}



//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage are only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
ZeroMemory(&wcex,sizeof(&wcex));

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName = "Hello!!!!";
wcex.lpszClassName = "Window";
wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);

return RegisterClassEx(&wcex);
}

//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
// szWindowClass=
hWnd = CreateWindow("Window", "Hello!!!!", WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
RECT Rect;
HDC hdc,hmemdc;
static int cx,cy,Pos;
BITMAP Bitmap;
HANDLE hBitmap,hdc_Old;
SCROLLINFO hvi;

//Вариантная часть
switch(msg)
{
case WM_CREATE:
hvi.nMin=hvi.nPos=0;
hvi.cbSize=sizeof(SCROLLINFO);
Pos=0;
SetScrollPos(hWnd,SB_VERT,Pos,TRUE);
case WM_SIZE:
cx=LOWORD(lParam);
cy=HIWORD(lParam);
return 0;
case WM_VSCROLL: //Реализация функционала прокрутки
switch (LOWORD(wParam))
{
case SB_LINEUP:
Pos-=5;
return 0;
case SB_LINEDOWN:
Pos+=5;
return 0;
case SB_PAGEDOWN:
Pos+=10;
return 0;
case SB_PAGEUP:
Pos-=10;
return 0;
case SB_THUMBPOSITION:
Pos=HIWORD(wParam);
return 0;
}
SetScrollPos(hWnd,SB_VERT,Pos,TRUE);
InvalidateRect(hWnd,NULL,TRUE);
return 0;

case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
hBitmap=LoadImage(hInst,"c:\marbina.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); //Загрузка битмапа из файла
GetObject(hBitmap,sizeof(BITMAP),&Bitmap);//Возвращение структуры битмапа по его хэндлу
hmemdc=CreateCompatibleDC(hdc);//Открываем совместимый контекст
GetClientRect(hWnd,&Rect);
BitBlt(hdc,0,0,Rect.right,Rect.bottom,hmemdc,Bitmap.bmWidth/4,Bitmap.bmHeight/4,SRCCOPY);//Копируем битмап из совместимого контекста непосредственно на экран с рисованием
/*Поскольку все нарисовано,удаляем ненужные переменные*/
DeleteObject(hBitmap);//Удаляем сам битмап
DeleteObject(hdc_Old);//Удаляем использованный контекст
DeleteDC(hmemdc);//Удаляем совместимый контекст
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
Destroy();
return 0;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
}

void Destroy()
{PostQuitMessage(0);}
Второй вопрос был про то, как реализовать просмотр картинки через полосы прокрутки,как ее пролистывать? Видимо,мой вопрос отобразился не весь почему-то вчера smile smile

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 2

= общий = | 28.07.2008, 13:45 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Zombi-6

"Я присылал его во вложении,но он,видимо не воспроизвелся."
Возможно в коде было излишне большое кол-во символов. smile Впрочем, я не подсчитывал, но в любом случае ненужные фрагменты, типа вот таких комментариев:

© Цитата:
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage are only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//

в код включать не нужно, т.к. они не несут никакой смысловой нагрузки (в даннром случае). smile

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.18258 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.51 от 29.09.2018