2 / 2 / 0
Регистрация: 07.10.2015
Сообщений: 44
1

Переменная hdc не обьявлена

07.10.2015, 19:54. Показов 2886. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всплывает синее окошко и как только я щелкаю по области r1 левой кнопкой мыши пишет переменная hdc не инициализорована а если не по этой области то ошибки нет в чем мой косяк битый час сижу. Смысл задания:
создать синее окно изначально, затем при кликании по какой либо области(допустим r1) менялся цвет всего фона
всего окошка на тот который захочу я в функции FrameRect(hdc, &r5, (HBRUSH)COLOR_BTNFACE + 5);
и причем жалуется он именно тут(ну тоесть в этой функции) хотя заранее в WM_PAINT я его описал
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
#include <windows.h>
//Дескриптор, handle, описатель - число, которое задает номер какого-либо ресурса (блок памяти, файл, курсор, шрифт, окно итп. )
RECT r1 = { 0, 0, 160, 120 };
RECT r2 = { 160, 120, 320, 240 };
RECT r3 = { 160, 0, 320, 120 };
RECT r4 = { 0, 120, 160, 240 };
RECT r5 = { 0, 0, 320, 240 };
LRESULT CALLBACK myWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 
    PAINTSTRUCT ps;
    POINT pt;
    HDC hdc;
    //hdc = BeginPaint(hWnd, &ps);
    int x, y;//переменные для хранения координат куда я тыкаю мышкой
    static int sx, sy;//ширина и длина окошка
    switch (uMsg)
    {
    case WM_SIZE:
    {
        sx = LOWORD(lParam);//беру ширину
        sy = HIWORD(lParam);//беру длину
        break;
    }
    case WM_PAINT:
    {
        hdc = BeginPaint(hWnd, &ps);
        HBRUSH brush = CreateSolidBrush(RGB(255, 0, 0));
        SelectObject(hdc, brush);
        for (int x = 0; x < sx; x++)
        {
            LineTo(hdc, x, 240);
        }
        EndPaint(hWnd, &ps);
    }
    case WM_LBUTTONDOWN:
    {
        GetCursorPos(&pt);
        x = pt.x;
        y = pt.y;
        if (PtInRect(&r1, pt)) FrameRect(hdc, &r5, (HBRUSH)COLOR_BTNFACE + 5);
        break;
    }
    case WM_LBUTTONUP:
        InvalidateRect(hWnd, NULL, true);
        ReleaseDC(hWnd, hdc);
        break;
    case WM_CLOSE:
        PostQuitMessage(0);
        return 0;
    }
 
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
 
int main(int argc, char **argv)
{
    // Get the handler of module that will be associated with a window.
    // In this case it will be handler of the executable file of current process.
    HINSTANCE hInstance = GetModuleHandle(NULL);// дескриптор экземпляра программы
 
    // Create brush that will fill the background of the window.
    HBRUSH hBrush = CreateSolidBrush(RGB(0, 0, 255));// создание кисти для заливки красный-зеленый-синий
 
    // Create window class.
    WNDCLASS winClass;
    winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;//то как себя может вести окно
    winClass.lpfnWndProc = (WNDPROC)myWndProc;//обработка сообщений окна
    winClass.cbClsExtra = 0;//дополнительная память для пользователя-ерунда короче
    winClass.cbWndExtra = 0;//дополнительная память для пользователя-ерунда короче
    winClass.hInstance = hInstance;//дескриптор модуля 
    winClass.hIcon = LoadIcon(NULL, IDI_WINLOGO);//дескриптор иконки окна
    winClass.hCursor = LoadCursor(NULL, IDC_CROSS);//дескриптор курсора мышки (я сделал крестик так лучше смотрится)
    winClass.hbrBackground = (HBRUSH)COLOR_BTNFACE+3;//задание цвета фона если менять +i будет меняться цвет
    winClass.lpszMenuName = NULL;//имя ресурса где содержится менюшка окна(нам она не нужна)
    winClass.lpszClassName = "MyWindowClass";//имя класса
 
    RegisterClass(&winClass);//регистрируем класс в системе чтобы на его базе создавать окна
 
    HWND hWnd = CreateWindow("MyWindowclass", "ОКНО", //создание окна на базе класса MyWindowClass с именем окно HWND-дескриптор окна
        WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_BORDER,//параметры поведения окна в данном случае его можно перекрыть
        0, 0, 320, 240, //100 и 100 это положение окна 240 на 320 это его размеры ширина и длина
        NULL, NULL, hInstance, NULL);//нет окна владельца, нет менюшки или дочернего окна,ссылка на модуль...
    //на моем экране х(0,1000) y(0,500)
    ShowWindow(hWnd, SW_SHOW);//показ окна hwnd-переменная типа окно SW_SHOW
 
    MSG message;// создание структуры типа MSG с кучей дибильных полей
    while (true)//в данном случае при любом щелчке по окну оно не закроется если его самому не закрыть
    {
        if (PeekMessage(&message, hWnd, 0, 0, PM_REMOVE))
        {
            if (message.message == WM_QUIT)
                break;
            else
            {
                TranslateMessage(&message);//переводит сообщение в последовательность цифр
                DispatchMessage(&message);//отправка сообщения в оконной процедуре
            }
        }
    }
 
    DestroyWindow(hWnd);//уничтожение окна с освобождением памяти
 
    UnregisterClass("MyWindowclass", hInstance);//отмена регистрации класса
 
    DeleteObject(hBrush);
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2015, 19:54
Ответы с готовыми решениями:

Передача hdc в функцию
Всем привет! Рисую полигоны (Polygon, bdc, 3) на wm_paint. Полигонов много поэтому пытаюсь...

CreateDIBSection без hdc
Если аргумент iUsage функции CreateDIBSection равен DIB_PAL_COLORS, функция берет палитру из...

Глобальный HDC и имя переменной
1) Почему глобальный HDC невозможен? Точнее, если обработать WM_CREATE с добавлением : hdc =...

Вывести рисунок из файла на HDC
как вывести рисунок из файла не прибегая к компонентам, т.е. есть HDC dc - на ней нарисовать.

1
39 / 39 / 11
Регистрация: 05.09.2015
Сообщений: 262
07.10.2015, 21:06 2
1) Оформляйте тегом [ CPP ].
2) У вас в нажатии мышкой переменная впрямь не инициализирована.
C++
1
2
3
hdc = GetDC(hWnd);
...
ReleaseDC(hWnd, hdc);
0
07.10.2015, 21:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2015, 21:06
Помогаю со студенческими работами здесь

Шрифт из ресурсов (окно, HDC)
Всем привет! Появился вопрос, как применить своей программе шрифт из ресурсов? Для начала как...

Получения цвета методом hdc
Привет всем. Задачка очень простая. Получить числа в виде кода RGB для пикселя под курсором....

Скопировать Bitmap в другой HDC
Приветствую! Есть вот такой код: HDC hDC = GetDC(caller-&gt;window()); HDC memDC =...

Контрол с прозрачностью и hwnd, hdc?
Народ какой контрол можно использовать в качестве экрана и при этом он имел прозрачность наподобие...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru