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

Вывести диалоговое окно, сочетания клавиш

16.02.2015, 23:51. Показов 763. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, есть уже готовая программа, которая меняет иконки приложения по таймеру. Нужно в нее добавить возможность открытия диалогового окна по сочетанию клавиш, и обеспечить в этом окне возможность смены "периода" таймера смены иконок. Главный вопрос - как создать второе диалоговое окно? Как дочернее для основного? Для него нужна своя оконная процедура? Как передать то, что ввел во втором окне (там будет Edit, я думаю) в первое? Как и откуда вывести ворое окно на экран? Как его закрыть?

Помогите, пожалуйста.

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <windows.h>
#include "resource.h"
 
#define IDT_TIMER1 1488 
 
 
 
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
 
static char szDevName[] = "blababa";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static char szAppName[] = "blabalba";
    HWND hwnd;
    MSG msg;  
 
    WNDCLASSEX wndclass;  
 
    wndclass.cbSize = sizeof(wndclass); 
    wndclass.style = CS_HREDRAW;
    wndclass.lpfnWndProc = WndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
                                    
    wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
 
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); 
 
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = NULL; 
 
    wndclass.lpszClassName = szAppName;
 
    wndclass.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); 
    RegisterClassEx(&wndclass); 
    
    hwnd = CreateWindow(
        szAppName,  
        "Application 1",
        WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT,  
        CW_USEDEFAULT,   
        200,  
        200,  
        NULL,  
        NULL,   
        hInstance,  
        NULL
        );
    
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);         
    
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
 
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
    HDC hdc;
    HINSTANCE hInst;
    HICON hIcon;
    HICON hIconSm;
 
    static WORD IconNumber;
 
    SetTimer(hwnd, IDT_TIMER1, 1000, NULL);
 
    PAINTSTRUCT ps; 
    RECT rect; 
 
    switch (iMsg) {
    
    case WM_PAINT: 
        hInst = GetModuleHandle(NULL);
        hdc = BeginPaint(hwnd, &ps);
        IconNumber = 1;
        
        SetTextAlign(hdc, TA_CENTER | TA_TOP);
        
        GetClientRect(hwnd, &rect);
        TextOut(hdc, rect.right / 2, rect.bottom / 2, szDevName, strlen(szDevName));
 
 
        EndPaint(hwnd, &ps);
        return 0;
   
    case WM_TIMER:
        hInst = GetModuleHandle(NULL);
        switch (IconNumber)
        {
        case 1:
            hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
            hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
            SetClassLong(hwnd, GCL_HICON, (LONG)hIcon);
            SetClassLong(hwnd, GCL_HICONSM, (LONG)hIconSm);
            IconNumber = 2;
            return 0;
        case 2: 
            hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON2));
            hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON2));
            SetClassLong(hwnd, GCL_HICON, (LONG)hIcon);
            SetClassLong(hwnd, GCL_HICONSM, (LONG)hIconSm);
            IconNumber = 3;
            return 0;
        case 3:
            hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));
            hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON3));
            SetClassLong(hwnd, GCL_HICON, (LONG)hIcon);
            SetClassLong(hwnd, GCL_HICONSM, (LONG)hIconSm);
            IconNumber = 1;
            return 0;
        }
 
        return 0;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        
        return 0;
    }
    return DefWindowProc(hwnd, iMsg, wParam, lParam);
    
}
Добавлено через 1 час 38 минут
Ладно, диалоговое окно смог вывести на нажатие кнопки мыши. А как это на комбинацию клавиш сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2015, 23:51
Ответы с готовыми решениями:

Работа с клавиатурой, сочетания клавиш, блокировка клавиш
Здравствуйте! Есть такая вот задачка: Разработать программу обработки прерывания от клавиатуры,...

При клике на QGraphicsView вывести диалоговое окно ввода переменной
Есть элемент QGraphicsView: key = scene-&gt;addLine(175,-100,190,-105,blackpen);...

Как вывести диалоговое окно со знаком вопроса и двумя кнопками?
Подскажите, не знаю как сделать. Мне нужно,чтоб при нажатии на кнопку, программа выдала диалоговое...

Сочетания клавиш в QT сошли с ума
Сочетания клавиш в QT сошли с ума, ведут себя по новому, не могу так ничего нормально писать,...

0
16.02.2015, 23:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2015, 23:51
Помогаю со студенческими работами здесь

Изменились сочетания горячих клавиш
Приветствую. Сегодня обнаружил, что в C++Builder XE10.2 Update 3 изменились сочетания клавиш для...

Вывод сообщения о нажатии сочетания клавиш
Что неправильно? LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM IParam)...

Как вызвать окно "Показать возможные решения ошибок." нажатием сочетания клавиш?
Не показывается окно &quot;Показать возможные решения ошибок&quot;. В некоторых случаях показывается, но при...

Как вывести диалоговое окно?
Пишу на GraphABC 1) Как вывести диалоговое окно ? Например, пользователь вводит название файла,...

Вывести диалоговое окно MessageDlg
Кто нибудь разобрался с MessageDlg? Никак не получается вывести диалоговое окно.

Не удается вывести требуемое диалоговое окно
Невозможно загрузить файл или сборку &quot;Microsoft.SqlServer.Sqm, Version=11.0.0.0, Culture=neutral,...


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

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