Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
1

Ошибка при запуске GDI

27.09.2015, 10:11. Показов 555. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, ребятки!

При заупске GDI функцией GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL) срабатывает условие
C++
1
2
3
4
5
if (!GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL)) // запускаем ГДИ и проверям на наличие ошибок
    {
        MessageBox(NULL, L"Не получилось запустить GDI!", L"Ошибка", MB_OK | MB_ICONWARNING);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
Подскажите, пожалуйста, как это пофиксить?

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <windows.h> 
#include <gdiplus.h>
 
#pragma comment(lib, "Gdiplus.lib")
 
using namespace Gdiplus;
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
VOID OnPaint(HDC hdc);
 
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
    TCHAR szClassName[] = L"Мой класс"; // строка с именем класса
 
    HWND hMainWnd; // создаём дескриптор будущего окошка
    MSG msg; // создём экземпляр структуры MSG для обработки сообщений
 
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
 
    WNDCLASSEX wc; // создаём экземпляр, для обращения к членам класса WNDCLASSEX
        wc.cbSize        = sizeof(wc); // размер структуры (в байтах)
        wc.style         = CS_HREDRAW | CS_VREDRAW; // стиль класса окошка
        wc.lpfnWndProc   = WndProc; // указатель на пользовательскую функцию
        wc.lpszMenuName  = NULL; // указатель на имя меню (у нас его нет)
        wc.lpszClassName = szClassName; // указатель на имя класса
        wc.cbWndExtra    = NULL; // число освобождаемых байтов в конце структуры
        wc.cbClsExtra    = NULL; // число освобождаемых байтов при создании экземпляра приложения
        wc.hIcon         = LoadIcon(NULL, IDI_WINLOGO); // декриптор пиктограммы
        wc.hIconSm       = LoadIcon(NULL, IDI_WINLOGO); // дескриптор маленькой пиктограммы (в трэе)
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW); // дескриптор курсора
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // дескриптор кисти для закраски фона окна
        wc.hInstance     = hInst; // указатель на строку, содержащую имя меню, применяемого для класса
    
    if (!GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL)) // запускаем ГДИ и проверям на наличие ошибок
    {
        MessageBox(NULL, L"Не получилось запустить GDI!", L"Ошибка", MB_OK | MB_ICONWARNING);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
 
    if (!RegisterClassEx(&wc))
    {
        // в случае отсутствия регистрации класса:
        MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK | MB_ICONWARNING);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
 
    // Функция, создающая окошко:
    hMainWnd = CreateWindow(
        szClassName, // имя класса
        L"Полноценная оконная процедура", // имя окошка (то что сверху)
        WS_OVERLAPPEDWINDOW | WS_VSCROLL, // режимы отображения окошка
        CW_USEDEFAULT, // позиция окошка по оси х
        NULL, // позиция окошка по оси у (раз дефолт в х, то писать не нужно)
        CW_USEDEFAULT, // ширина окошка
        NULL, // высота окошка (раз дефолт в ширине, то писать не нужно)
        (HWND)NULL, // дескриптор родительского окна
        NULL, // дескриптор меню
        HINSTANCE(hInst), // дескриптор экземпляра приложения
        NULL); // ничего не передаём из WndProc
    
    if (!hMainWnd)
    {
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
 
    ShowWindow(hMainWnd, nCmdShow); // отображаем окошко
    UpdateWindow(hMainWnd); // обновляем окошко
 
    while (GetMessage(&msg, NULL, NULL, NULL))
    { // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
        TranslateMessage(&msg); // интерпретируем сообщения
        DispatchMessage(&msg); // передаём сообщения обратно ОС
    }
 
 
    GdiplusShutdown(gdiplusToken); // выключаем ГДИ и ложим прогу спать
    return msg.wParam; 
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
 
    switch (uMsg)
    {
        case WM_CREATE:
            MessageBox(hWnd, L"Привет паца, ты крутой програм ибо создал это окошко и твоя прога пашет, удачи))!!)!)!)!", L"re", MB_OK | MB_ICONHAND);
            break;
        case WM_DESTROY: // если окошко закрылось, то:
            PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
            break;
        case WM_PAINT: //рисуем
            hDC = BeginPaint(hWnd, &ps); // начинаем рисовать
            OnPaint(hDC); // пользовательская функция рисования
            EndPaint(hWnd, &ps); // заканчиваем рисовать
            break;
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam); // если закрыли окошко
    }
 
    return NULL; // возвращаем значение
}
 
VOID OnPaint(HDC hdc)
{                           //ну здесь все понятно всякие шрифты для текса и т.д.
    Graphics    graphics(hdc);
    SolidBrush  brush(Color::Blue);
    FontFamily  fontFamily(L"Times New Roman");
    Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
    PointF      pointF(10.0f, 20.0f);
 
    graphics.DrawString(L"Все вышло, -1, &font, pointF, &brush); // рисуем свои каракули на экране
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2015, 10:11
Ответы с готовыми решениями:

Ошибка при запуске функции CreateProcess()
Доброго времени суток! Делаю лабу по Операционным системам и столкнулась с проблемой. Вот задание:...

Непонятная ошибка при запуске программы
суть в том что при запуске программа сразу же выдает ошибку. Может ли это быть связано со...

Ошибка при запуске нового процесса
Доброго времени суток. Только начал изучать win32 и почему-то в простейшей программе при запуске...

Ошибка при запуске Release-сборки приложения
Здравствуйте! напишите пожалуйста подробный гайд, как делать рабочее exe сразу после компиляции? ...

1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
27.09.2015, 11:13 2
GdiplusStartup возвращает 0 в случае успеха.
1
27.09.2015, 11:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2015, 11:13
Помогаю со студенческими работами здесь

BitBlt GDI ошибка
Есть функционал для сохранения скриншотов. Скрины делаются на виртуалках. Функция: void...

Ошибка или глюк gdi?
Решил изучить gdi. Написал пример, по экспериментировал, но не обошлось без глюков)) В архиве...

Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка
Я знаю точно, что ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске моей...

Ошибка при запуске
В Borland С++ написал самую простую прогу певый раз. Компилится нормально, но при попытке запустить...

Ошибка при запуске
Всем привет! При запуске пишет ошибки в коде: #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include...

Ошибка при запуске
Добрый день. Запускаю готовый проект на локальной машине, запускается, но в момент переноса на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru