Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420

Не выводится скриншот на просмотр

29.01.2015, 00:11. Показов 635. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В теле функции WinMain() я создаю все контексты после создания главного окна (CreateWindow)
C++
1
2
3
4
5
6
ResX = GetSystemMetrics(SM_CXSCREEN);
           ResY = GetSystemMetrics(SM_CYSCREEN);
           DCScrin = GetDC(NULL);
         DCBitMap = CreateCompatibleDC(DCScrin);
             hBitMaptemp = CreateCompatibleBitmap(DCBitMap, ResX,ResY);
             hBitMap = (HBITMAP)SelectObject(DCBitMap, hBitMaptemp);
В оконной функции case WM_PAINT я только вывожу картинку на экран:BitBlt(DCBitMap, 0,0,ResX,ResY,DCScrin, 0,0,SRCCOPY);

И самое удивительное, что картинки нет. Программа подвисает (словно обрабатывает скрин), но все равно белый фон.
На всякий случай весь код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include<Windows.h>
#include<WindowsX.h>
 
WNDCLASS wc, wc1;
HWND HWin; HDC DCScrin, DCBitMap;
HBITMAP hBitMaptemp, hBitMap;
int ResX,ResY;
 
LRESULT CALLBACK Glaw_Win(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE Hinst, HINSTANCE hhh, LPSTR CmdLine, int Vid)
{
    MSG msg;
    HINSTANCE HENDL= Hinst;
 
    wc.cbClsExtra = 0; wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = NULL;
    wc.hInstance = HENDL; wc.lpfnWndProc = Glaw_Win;
    wc.lpszClassName = L"Glaw_Win"; wc.lpszMenuName = NULL;
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    RegisterClass(&wc);
    HWin = CreateWindowExW(NULL, L"Glaw_Win", L"Window", WS_SYSMENU | WS_VISIBLE |  WS_MINIMIZEBOX| WS_CLIPCHILDREN | WS_CLIPSIBLINGS,0,0, ResX,ResY, HWND_DESKTOP, NULL, HENDL, NULL);
    if(!HWin) {MessageBoxW(HWND_DESKTOP, L"Window nor create", L"Error!!!", MB_OK); return 1;}
ResX = GetSystemMetrics(SM_CXSCREEN);
           ResY = GetSystemMetrics(SM_CYSCREEN);
           DCScrin = GetDC(NULL);
         DCBitMap = CreateCompatibleDC(DCScrin);
             hBitMaptemp = CreateCompatibleBitmap(DCBitMap, ResX,ResY);
             hBitMap = (HBITMAP)SelectObject(DCBitMap, hBitMaptemp);
          
    ShowWindow(HWin, SW_SHOWMAXIMIZED);
    UpdateWindow(HWin);
 
    while(GetMessage(&msg, NULL, 0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
 
}
LRESULT CALLBACK Glaw_Win(HWND HW, UINT ms, WPARAM WP, LPARAM LP)
{
    switch(ms)
    {
    
    case WM_PAINT:
         {
          BitBlt(DCBitMap, 0,0,ResX,ResY,DCScrin, 0,0,SRCCOPY);
                 UpdateWindow(HWin);
 
             break;}
 
    case WM_DESTROY:{DestroyWindow(HWin); PostQuitMessage(0);break;}
    default: {return DefWindowProc(HW, ms, WP, LP); break;}
    }
    return 0L;
 
}
Я уже отчаялся, так как не первый день зависаю на этой проблеме. Подскажите, что я не правильно делаю при получении скриншота и его вывода на экран?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2015, 00:11
Ответы с готовыми решениями:

Скриншот и просмотр фоток
Добрый день. После отключения автообновления 8 винды мы с ней более-менее нашли общий язык. Но некоторые функции сами собой пропали....

Не выводится по isbn определённая картинка для каждой книги,но выводится просто по имени картинки а мне нужно
Не выводится по isbn определённая картинка для каждой книги,но выводится просто по имени картинки, а мне нужно чтоб выводилось по isbn. ...

Результат выводится в поле но не выводится в span
&lt;div class=&quot;hot_predlojenia&quot;&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hot_home_page&quot; id=&quot;hot_home_page&quot; value=&quot;a&quot; onclick=&quot;showMe(this)&quot;&gt; &lt;label...

2
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.01.2015, 00:32
Цитата Сообщение от casper007 Посмотреть сообщение
В оконной функции case WM_PAINT я только вывожу картинку на экран:BitBlt(DCBitMap, 0,0,ResX,ResY,DCScrin, 0,0,SRCCOPY);
Вам нужно в обработчике WM_PAINT получить HDC окна и делать BitBlt в
него, а не в DCBitMap. Порядок действий примерно такой:

1. Получаем HDC окна в WM_PAINT, функция называется BeginPaint.

2. Делаем BitBlt.

3. Вызываем EndPaint.

Тогда будет работать. Еще парочка замечаний:

C++
1
2
3
DCBitMap = CreateCompatibleDC(DCScrin);
hBitMaptemp = CreateCompatibleBitmap(DCBitMap, ResX,ResY);
hBitMap = (HBITMAP)SelectObject(DCBitMap, hBitMaptemp);
Здесь в CreateCompatibleBitmap лучше использовать DCScrin, а не DCBitMap.
И лучше называть вещи своими именами: hBitMaptemp - это device context, а
не bitmap, поэтому и название ему лучше давать соответствующее: hMemoryDC,
hTempDC и т.д. Для битмапов: hMemBitmap, hScreenBmp и т.п.
1
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
29.01.2015, 00:45  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Вам нужно в обработчике WM_PAINT получить HDC окна
У меня была мысль на счет этого, но я ее опроверг, так как подумал, что это излишне, ведь у нас используется GetDC. Спасибо вам. Я заодно вспомнил, что в WM_PAINT обязательны BeginPaint и EndPaintю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2015, 00:45
Помогаю со студенческими работами здесь

Если есть в базе данные, то всё выводится, иначе выводится шаблон, где должны быть данные
если если в базе данные то всё выводится как только их нет то выводится шаблон где должны быть данные, как его убрать вообще чтобы не было?...

Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение
Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение «M на N...

скриншот
подскажите, пожалуйста, как передать скриншот серверу через clientsocket и получить serversocket'ом?

скриншот
Подскажите, как сделать скриншот в паскале, не прога, а снимок изображения

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru