Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
1

Не выводится диалоговое окно

15.11.2015, 18:48. Показов 969. Ответов 2

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Пытаюсь создать мини-программу с перемещающейся фигурой. Одной из задач являет задание цвета фигуры. Задание происходит по нажатию ЛКМ по области. Однако при вызове функции ChooseColor(...) само окно выбора цвета не появляется, но я тем не менее не могу сделать нажатие по основному окну (как и должно быть при вызове модального окна). При этом опытным путем было выведено, что при нажатии клавиши Alt (и только этой клавиши) диалог таки появляется. В чем может быть причина?
Функция вызова диалога выбора цвета:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn GetColorDlg(HWND hWnd, COLORREF &col) -> void {
 
    CHOOSECOLOR cc;
    COLORREF arrCol[16] = { 0 };
    ZeroMemory(&cc, sizeof(cc));
    cc.lStructSize = sizeof(CHOOSECOLOR);
    cc.hwndOwner = hWnd;
    cc.lpCustColors = arrCol;
    cc.rgbResult = col;
    cc.Flags = CC_RGBINIT;
    if (ChooseColor(&cc)) {
        col = cc.rgbResult;
    }
 
}
Обработчик окна:
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
fn CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -> LRESULT {
 
    PAINTSTRUCT ps;
    RECT win;
    GetClientRect(hWnd, &win);
    int w = win.right - win.left;
    int h = win.bottom - win.top;
 
    static COLORREF shape_color = RGB(0, 255, 255);
 
    static int x = 50, y = 50;
    static int r = 40;
 
    const int step = 50;
 
    switch (message) {
    case WM_LBUTTONDOWN:
 
        GetColorDlg(hWnd, shape_color);
        break;
 
    case WM_KEYDOWN:
 
        switch (wParam) {
        case VK_UP:
            y -= step;
            break;
        case VK_DOWN:
            y += step;
            break;
        case VK_LEFT:
            x -= step;
            break;
        case VK_RIGHT:
            x += step;
            break;
        }
        x = x + r > w ? w - r : x - r < 0 ? r : x;
        y = y + r > h ? h - r : y - r < 0 ? r : y;
 
        RECT invalid_area;
        invalid_area.top = y + r;
        invalid_area.left = x - r;
        invalid_area.bottom = y - r;
        invalid_area.right = x + r;
        InvalidateRect(hWnd, &invalid_area, true);
        break;
 
    case WM_SIZE: {
        
        if (x + r > w)
            x = w - r;
 
        if (y + r > h)
            y = h - r;
 
        break;
 
    }
 
    case WM_PAINT: {
 
        //HDC hdc = BeginPaint(hWnd, &ps);
        HDC hdc = GetDC(hWnd);
 
        //HBRUSH shape_brush = CreateSolidBrush(shape_color);
        //SelectObject(hdc, shape_brush);
        Circle(hdc, x, y, r);
 
        DeleteObject(hdc);
        //EndPaint(hWnd, &ps);
        break;
 
    }
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2015, 18:48
Ответы с готовыми решениями:

Диалоговое окно
Помогите создать дочернее окно. Необходимо, что бы по нажатию на кнопку в родительском окне...

Диалоговое окно
Здравствуйте. Помогите с решить данную задачу: на рисунке представлено то как должно выглядеть...

диалоговое окно
госпада открываю деалоговое окно вот так - memset(&amp;OpenFileName, 0, sizeof(OPENFILENAME));...

Диалоговое окно (чистый Си)
Помогите пожалуйста разобраться с вин апи. Я хочу написать записную книжку. Вот, что пока...

2
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
16.11.2015, 09:48 2
iRomul, а если основное окно спрятать (Hide) непосредственно перед вызовом окна выбора цвета, а потом сразу показать опять (SHOW) ?
0
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
16.11.2015, 18:14  [ТС] 3
на самом деле проблема крылась в том, что у меня не вызывались BeginPaint/EndPaint, из-за чего постоянно вызывался WM_PAINT, что мешало не только отобразить диалоговое окно, но и в дальнейшем мешал работе таймера.
0
16.11.2015, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2015, 18:14
Помогаю со студенческими работами здесь

Не создается диалоговое окно
Всем привет! Помогите новичку. Работаю в Dev-Cpp 5.11. Пытаюсь создать простое диалоговое окно с...

Диалоговое окно и TabControl
Здравствуйте! У меня есть диалоговое окно, которое хранится в файле ресурсов. Мне нужно добавить на...

Не отображается диалоговое окно
Здравствуйте. Я создал меню и на примере &quot;Помощь-&gt;О программе&quot; хотел вывести окно. Создал в...

Модальное диалоговое окно
Здравствуйте, помогите понять почему не работает. Вот сама проблема: Создаю при загрузке...


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

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