Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

scrnsave.lib - C++

31.08.2010, 10:12. Просмотров 1469. Ответов 9
Метки нет (Все метки)

Привет всем, разбираю статью (как написать screensaver),
там есть пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>
#include <scrnsave.h>
 
LRESULT WINAPI ScreenSaverProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    return 0;
}
 
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg,  UINT message,   WPARAM wParam,   LPARAM lParam)
{
    return true;
}
 
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
    return true;
}
создал проект Win 32 , подключил библиотеку scrnsave.lib (proect->properties->Configuration properties->Linker->Input->Additional Dependecies (среда Visual Studio 2005) ), при компиляции
ошибки:

1>scrnsave.lib(scrnsave.obj) : error LNK2019: unresolved external symbol _ScreenSaverProc@16 referenced in function _RealScreenSaverProc@16
1>scrnsave.lib(scrnsave.obj) : error LNK2019: unresolved external symbol __imp__InitCommonControlsEx@4 referenced in function _WinMainN@16
1>D:\Cpp\Projects\Win32\sc\Debug\sc.exe : fatal error LNK1120: 2 unresolved externals

Не пойму почему не копмилиться ( помогите разобраться. Заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2010, 10:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос scrnsave.lib (C++):

Как в VS 2015 устранить ошибку LNK 1104 cannot open file 'fltkd.lib wsock32.lib comct132.lib fltkjpegd.lib'? - C++
как устранить ошибку LNK 1104 в visual studio community 2015? пункта C/C++ в properties нету Можете сказать куда его перенесли или...

64-битная версия vcomp.lib и vcompd.lib из Visual Studio 2010 - C++
Здравствуйте. Встала проблема скомпилировать 64-битное приложение с поддержкой OpenMP. В силу рада обстоятельств вынужден использовать...

Библиотеки glut.lib и glut32.lib не могу найти - C++
Здравствуйте товарищи, помогите с очередной дилеммой. На днях начал изучать программирование, скачал Dav C++, но для дальнейших уроков...

Linker error msvcprtd.lib(msvcp100d.dll) error lnk2005 already defined libcpmtd.lib - C++
Господа, забрал из VSS солюшен (из 5 проектов) для VS2010 и стал его собирать. Увлекательный квест &quot;собери меня&quot; через неделю (с...

*.lib - C++
Написал я класс. Пусть он разбит на myClass.h и myClass.cpp. Как это все &quot;запихнуть&quot; в .lib? Добавлено через 12 минут ...

lib от PureBasic - C++
Задача: есть lib, созданная в PureBasic'e. Известны функции, количество параметров в каждой из них. Нужно написать хэдер и прикрутить к...

9
iama
1251 / 976 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
31.08.2010, 10:44 #2
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
61
62
63
64
65
66
67
68
69
70
71
72
73
void CaptureScreen(HWND window)
{
    //Получаем прямоугольную область экрана
    RECT windowRect;
    GetWindowRect(window, &windowRect);
 
    //Размеры битмэпа
    int bitmap_dx = windowRect.right-windowRect.left;
    int bitmap_dy = windowRect.bottom-windowRect.top;
 
    BITMAPINFOHEADER bmpInfoHeader;
    BITMAPFILEHEADER bmpFileHeader;
    BITMAP* pBitmap;
 
    bmpFileHeader.bfType = 0x4d42;
    bmpFileHeader.bfSize = 0;
    bmpFileHeader.bfReserved1 = 0;
    bmpFileHeader.bfReserved2 = 0;
    bmpFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
 
    bmpInfoHeader.biSize = sizeof(bmpInfoHeader);
    bmpInfoHeader.biWidth = bitmap_dx;
    bmpInfoHeader.biHeight = bitmap_dy;
    bmpInfoHeader.biPlanes = 1;
    bmpInfoHeader.biBitCount = 24;
    bmpInfoHeader.biCompression = BI_RGB;
    bmpInfoHeader.biSizeImage = bitmap_dx*bitmap_dy*(24/8);
    bmpInfoHeader.biXPelsPerMeter = 0;
    bmpInfoHeader.biYPelsPerMeter = 0;
    bmpInfoHeader.biClrUsed = 0;
    bmpInfoHeader.biClrImportant = 0;
 
    BITMAPINFO info;
    info.bmiHeader = bmpInfoHeader;
 
    BYTE* memory;
    HDC winDC = GetWindowDC(window);
    HDC bmpDC = CreateCompatibleDC(winDC);
    //Создаем битмэп
    HBITMAP bitmap = CreateDIBSection(winDC, &info, DIB_RGB_COLORS, (void**)&memory, NULL, 0);
    SelectObject(bmpDC, bitmap);//Выбираем в контекст битмэп
    BitBlt(bmpDC, 0, 0, bitmap_dx, bitmap_dy, winDC, 0, 0, SRCCOPY);
    ReleaseDC(window, winDC);
 
    OPENFILENAME ofn;//Указатель на структуру с данными инициализации диалогового окна
    char strFilter[] = "Файлы данных *.bmp\0";
    char strFileName[MAX_PATH] = "";
    memset(&ofn, 0, sizeof(OPENFILENAME));//Обнуление ofn
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = window;
    ofn.lpstrFilter = strFilter;
    ofn.lpstrFile = strFileName;//Буфер для имени файла
    ofn.nMaxFile = MAX_PATH;//Размер файла
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
    strcpy(strFileName, ofn.lpstrFile);
    GetSaveFileName(&ofn); //MessageBox(hwnd,"Невозможно сохранить файл","О программе...",MB_ICONINFORMATION);
    HANDLE hFile = CreateFile(
        ofn.lpstrFile, 
        GENERIC_WRITE, 
        0,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    if (hFile == INVALID_HANDLE_VALUE) 
        return;
    DWORD dwWritten = 0;
    WriteFile(hFile, &bmpFileHeader, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
    WriteFile(hFile, &bmpInfoHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL);
    WriteFile(hFile, memory, bmpInfoHeader.biSizeImage, &dwWritten, NULL);
    CloseHandle(hFile);
}
а там уже мучьте битмап

Добавлено через 1 минуту
ещё пример
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
// Create a normal DC and a memory DC for the entire screen. The 
// normal DC provides a "snapshot" of the screen contents. The 
// memory DC keeps a copy of this "snapshot" in the associated 
// bitmap. 
 
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); 
hdcCompatible = CreateCompatibleDC(hdcScreen); 
 
// Create a compatible bitmap for hdcScreen. 
 
hbmScreen = CreateCompatibleBitmap(hdcScreen, 
                     GetDeviceCaps(hdcScreen, HORZRES), 
                     GetDeviceCaps(hdcScreen, VERTRES)); 
 
if (hbmScreen == 0) 
    errhandler("hbmScreen", hwnd); 
 
// Select the bitmaps into the compatible DC. 
 
if (!SelectObject(hdcCompatible, hbmScreen)) 
    errhandler("Compatible Bitmap Selection", hwnd); 
 
        // Hide the application window. 
 
        ShowWindow(hwnd, SW_HIDE); 
 
         //Copy color data for the entire display into a 
         //bitmap that is selected into a compatible DC. 
 
        if (!BitBlt(hdcCompatible, 
               0,0, 
               bmp.bmWidth, bmp.bmHeight, 
               hdcScreen, 
               0,0, 
               SRCCOPY)) 
 
        errhandler("Screen to Compat Blt Failed", hwnd); 
 
        // Redraw the application window. 
 
        ShowWindow(hwnd, SW_SHOW);
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
31.08.2010, 12:17  [ТС] #3
iama, пример это хорошо, но мне бы хотелось исправить свои ошибки

Добавлено через 1 минуту
iama, Почему у библиотека scrnsave.lib не подключается?
0
iama
1251 / 976 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
31.08.2010, 12:20 #4
_Eldar_, я понятия не имею, что это за библиотека, и на кой она нужна, вам ведь всего-то навсего скрин нужно сделать.
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
31.08.2010, 12:27  [ТС] #5
iama, Ну в статье которую я читаю эта библиотека используется) . На счет твое примера, ты написал функцию void CaptureScreen(HWND window), мне нужно создать обычное виндовс приложение и использовать ее(функцию) в оконной процедуре при событии WM_PAINT?

Добавлено через 2 минуты
Проблема с подключением библиотеки еще актуальна
0
iama
1251 / 976 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
31.08.2010, 12:27 #6
_Eldar_, а что конкретно нужно? тот пример берет хендл окна и сохраняет скрин в файл, который ты выберешь в диалоге.
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
31.08.2010, 12:35  [ТС] #7
iama, Можешь весь код скинуть пожалуйста? не знаешь как из gif - а сделать screensaver?
0
iama
1251 / 976 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
31.08.2010, 12:36 #8
_Eldar_, в смысле, сохранить скрин в гиф?
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
31.08.2010, 12:37  [ТС] #9
iama, наоборот есть анимация *.gif из нее возможно сделать screensaver?
0
iama
1251 / 976 / 49
Регистрация: 30.07.2010
Сообщений: 5,297
31.08.2010, 12:44 #10
я мудак. прочитал "скриншот" вместо "скринсейвер". прикрепляю пример скринсейвера. по принципу поймете, как отрисовать нужное вам, а там подгрузить гиф файл, и отрисовать на форме - совсем несложно.
1
Вложения
Тип файла: zip ScrSaveTutorialVCProject.zip (15.8 Кб, 131 просмотров)
31.08.2010, 12:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 12:44
Привет! Вот еще темы с ответами:

lib библиотеки - C++
Я пишу статическую библиотеку, и в неё мне надо подключить другие стат. либы (из DirectX SDK). Как их подключить? Пробовал через #pragma...

inline и static lib - C++
Правильно ли я понимаю что инлайнинг функции производится на стадии компиляции? //mystaticLib.lib inline void a() { cout&lt;&lt;&quot;hello&quot;; }...

Не создается файл .lib - C++
Здравствуйте, такой вопрос. VS2012 Создал консольное приложение Win32, поставил при создании - статическая библиотека. После добавил в...

Не создается lib файл - C++
Есть проект на VS c++ 2010. При его компиляции выскакивает вот такое предупреждение: 1&gt;C:\Program Files...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.