Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
-34 / 2 / 1
Регистрация: 02.02.2011
Сообщений: 82

Переменные в WIN32 API

03.05.2011, 00:21. Показов 1613. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал небольшое приложение где в толк не возьму почему переменные ali не хочет работать, понял только одно что то тут с их глобальностью но что как и где искать счастья?
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#define ID_BUTTON1 3001
#define ID_BUTTON2 3002
#define ID_BUTTON3 3003
#define ID_BUTTON4 3004
#define ID_BUTTON5 3005
#define ID_BUTTON6 3006
 
static TCHAR szWindowClass[] = _T("win32app");
 
static TCHAR szTitle[] = _T("Контрольная вариант №4.");
 
HINSTANCE hInst;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_BTNFACE);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
 
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    hInst = hInstance;
 
    int w=((GetSystemMetrics(SM_CXSCREEN))/2)-250; 
    int h=((GetSystemMetrics(SM_CYSCREEN))/2)-200;
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        w, h,
        500, 400,
        NULL,
        NULL,
        hInstance,
        NULL
    );
 
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Call to CreateWindow failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    ShowWindow(hWnd,
        nCmdShow);
    UpdateWindow(hWnd);
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
}
 
 
inline LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[20] = _T("Контрольная");
    bool ali;
    bool bli;
    bool cli;
    bool dli;
    bool fli;
    static HWND hButton1, hButton2, hButton3, hButton4, hButton5, hButton6;
    switch (message)
    {
    case WM_CREATE:
    hButton1 = CreateWindow(_T("button"), _T("Фио"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,40,200,20,  hWnd,   (HMENU)ID_BUTTON1,  hInst,  NULL);
    hButton2 = CreateWindow(_T("button"), _T("№"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,70,200,20,  hWnd,   (HMENU)ID_BUTTON2,  hInst,  NULL);
        hButton3 = CreateWindow(_T("button"), _T("Мера"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,100,200,20,  hWnd,   (HMENU)ID_BUTTON3,  hInst,  NULL);
        hButton4 = CreateWindow(_T("button"), _T("Номер"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,130,200,20,  hWnd,   (HMENU)ID_BUTTON4,  hInst,  NULL);
        hButton5 = CreateWindow(_T("button"), _T("Касса"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,160,200,20,  hWnd,   (HMENU)ID_BUTTON5,  hInst,  NULL);
        hButton6 = CreateWindow(_T("button"), _T("Вычислить"),
        WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
        120,200,200,20,  hWnd,   (HMENU)ID_BUTTON6,  hInst,  NULL);
             ali = FALSE;
             bli = FALSE;
             cli = FALSE;
             dli = FALSE;
             fli = FALSE;
    break;
    case WM_COMMAND:
         switch (LOWORD(wParam))
         {
         case ID_BUTTON1:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             ali = 1;
         break;
         case ID_BUTTON2:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             bli = 1;
         break;
         case ID_BUTTON3:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             cli = 1;
         break;
         case ID_BUTTON4:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             dli = 1;
         break;
         case ID_BUTTON5:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             fli = 1;
         break;
         case ID_BUTTON6:
             if (ali)
             {
             MessageBox(hWnd, _T("Ф.И.О, \n 5-2И, \n Метр, \n 801267352, \n 5."), _T("Сообщние"), MB_OK);
             }
             SendMessage(hButton1, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton2, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton3, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton4, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton5, BM_SETCHECK, FALSE, 0L);
             ali = FALSE;
             bli = FALSE;
             cli = FALSE;
             dli = FALSE;
             fli = FALSE;
         break;
         }
    break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc, 200, 5, greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
    return 0;
}
Приложение компилируется но после нажатия на кнопку "Вычислить", выдается подобное сообщение:
The variable 'ali' is being used without being initialized.
Помогите кто может, все написано в Microsoft Visual C++ 2008 Express Edition.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2011, 00:21
Ответы с готовыми решениями:

Динамический массив и функции управления памятью Win32 API
Первая функция получает размерность массива, создает динамический массив и возвращает указатель на начало созданного массива. Вторая –...

Архивация файлов, используя библиотеку Win32 API
может кто поможет :) Используя библиотеку Win32 API. Тема:Разработка программы архивации файлов и каталогов алгоритмом арифметическое...

Почему Microsoft больше не публикует книги по Win32 API? В частности, разработка графического интерфейса с Win32
Кто-нибудь знает, почему Microsoft перестала публиковать книги по программированию Win32 GUI? Я использую электронную книгу...

7
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 00:25
1. Если они у тебя булевские, так и присваивай true или false. F не 1 и FALSE.
2. При объявлении false сразу присвой.
0
-34 / 2 / 1
Регистрация: 02.02.2011
Сообщений: 82
03.05.2011, 00:30  [ТС]
Я пробывал не чего и пробывал делать их long и int не помогает часа четыре сижу понять не могу в чем дело.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
03.05.2011, 00:59
Цитата Сообщение от cilin Посмотреть сообщение
Я пробывал не чего и пробывал делать их long и int не помогает часа четыре сижу понять не могу в чем дело.
в тексте ошибки все написано, переменная не была инициализирована, а уже используется
а то, что Вы присвоили им значения при обработке WM_CREATE - фигня все это, они ж не статические
0
-34 / 2 / 1
Регистрация: 02.02.2011
Сообщений: 82
04.05.2011, 00:12  [ТС]
Тогда подскажите как это сделать или где почитать. Я понимал что, что то тут в этом роде но я новичок и много не знаю.

Добавлено через 1 час 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
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
inline LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[20] = _T("Контрольная");
    bool ali = FALSE;
    bool bli = FALSE;
    bool cli = FALSE;
    bool dli = FALSE;
    bool fli = FALSE;
    static HWND hButton1, hButton2, hButton3, hButton4, hButton5, hButton6;
    switch (message)
    {
    case WM_CREATE:
        hButton1 = CreateWindow(_T("button"), _T("Фамилия студента"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,40,200,20,  hWnd,   (HMENU)ID_BUTTON1,  hInst,  NULL);
        hButton2 = CreateWindow(_T("button"), _T("Номер группы"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,70,200,20,  hWnd,   (HMENU)ID_BUTTON2,  hInst,  NULL);
        hButton3 = CreateWindow(_T("button"), _T("Факультет"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,100,200,20,  hWnd,   (HMENU)ID_BUTTON3,  hInst,  NULL);
        hButton4 = CreateWindow(_T("button"), _T("Номер зачетки"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,130,200,20,  hWnd,   (HMENU)ID_BUTTON4,  hInst,  NULL);
        hButton5 = CreateWindow(_T("button"), _T("Курс"),
        WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
        120,160,200,20,  hWnd,   (HMENU)ID_BUTTON5,  hInst,  NULL);
        hButton6 = CreateWindow(_T("button"), _T("Да"),
        WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
        120,200,200,20,  hWnd,   (HMENU)ID_BUTTON6,  hInst,  NULL);
    break;
    case WM_COMMAND:
         switch (LOWORD(wParam))
         {
         case ID_BUTTON1:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             ali = TRUE;
         break;
         case ID_BUTTON2:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             bli = TRUE;
         break;
         case ID_BUTTON3:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             cli = TRUE;
         break;
         case ID_BUTTON4:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             dli = TRUE;
         break;
         case ID_BUTTON5:
             SendMessage((HWND)lParam, BM_SETCHECK, 1, 0L);
             fli = TRUE;
         break;
         case ID_BUTTON6:
             if (!(ali))
             {
             MessageBox(hWnd, _T("Даневич, \n 5-2И, \n Прикладная информатика, \n 801267352, \n 5."), _T("Сообщние"), MB_OK);
             }
             SendMessage(hButton1, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton2, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton3, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton4, BM_SETCHECK, FALSE, 0L);
             SendMessage(hButton5, BM_SETCHECK, FALSE, 0L);
             ali = FALSE;
             bli = FALSE;
             cli = FALSE;
             dli = FALSE;
             fli = FALSE;
         break;
         }
    break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc, 200, 5, greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
    return 0;
}
То вынужден констатировать что переменная ali принимает постоянное значение FALSE и не изменяется.

Добавлено через 1 минуту
Но в программе ошибок нету все работает четко.

Добавлено через 5 часов 55 минут
Решение было найдено:
C
1
2
3
4
5
    static bool ali = FALSE;
    static bool bli = FALSE;
    static bool cli = FALSE;
    static bool dli = FALSE;
    static bool fli = FALSE;
Не знаю может как и мне кому нибудь пригодится.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
04.05.2011, 11:22
inline ... WndProc
0
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
04.05.2011, 11:33
bool - это встроенный тип. У него значения true и false
BOOL - это typedef int. У него значения TRUE и FALSE.
Зачем же вы их путаете? Компилятор не ругается?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
04.05.2011, 21:00
Та не-е, все дело в static, хоть так хоть сяк, с чего компилятору ругаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2011, 21:00
Помогаю со студенческими работами здесь

С++ Win32 API
Подскажите книгу с самым доступным объяснением по данной теме. Что-то в роде &quot;С++ за 21 день&quot; только по Win32. Для чайников так...

Win32 API
Хочу научиться пользоваться функциями API. Подскажите с чего начать.

Qt + Win32 API
Использую Qt как среду разработки по Windows. Опыта, к сожалению, пока нет никакого. Собственно вопрос: какие библиотеки нужны и как их...

Змейка на win32 api C++
ребят, возможно у кого затерялась змейка на win32 api C++, даже самый примитивный вариант сойдет, главное чтобы работал) Очень прошу,...

Исходники Win32 Api
У кого есть свои или знаете где их взять прошу скиньте ссылку. Книг хороших куча, но нужен самый простой шаблон с прямоугольником, что бы я...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru