Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
349 / 310 / 214
Регистрация: 21.02.2013
Сообщений: 739
1

Cоздание кнопок "button" в цикле

30.06.2014, 13:48. Просмотров 1027. Ответов 1
Метки нет (Все метки)


Здравствуйте!
Возможно ли как нибудь создать много кнопок циклом:
Если я создаю одну кнопку то:
C++
1
2
3
4
5
6
7
8
9
10
#define ID_0  1000
...
 
...
hNumButton[0] = CreateWindow ("button" , "0",
                    WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                    l, t, 30, 30,
                    hwnd,  (HMENU)ID_0, hinst,
                    NULL
                    );
Это понятно, здесь (HMENU)ID_0 говорит что в WM_COMMAND в случае case ID_0: будет какое либо действие.

А вот как бы их циклом создать. Я пробую :
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
#define ID_1  1001
#define ID_2  1002
#define ID_3  1003
#define ID_4  1004
#define ID_5  1005
#define ID_6  1006
#define ID_7  1007
#define ID_8  1008
#define ID_9  1009
 
...
...
case WM_CREATE:
        {
 int xstep = 40, ystep = 40, l, t = 100;
            for(int i = 1; i < 10; i++)
            {
                l = 20;
                for(int j = 0; j != 3; j++)
                {
 
                    itoa(i, numb, 10);
                    hNumButton[i] = CreateWindow ("button" , numb,
                    WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                    l, t, 30, 30,
                    hwnd,  (HMENU)(1000 + i), hinst,
                    NULL
                    );
                    l+= xstep;
                    i++;
 
                }
                i--;
                t+= ystep;
 
            }
вроде бы все создается, но в WM_COMMAND эти кнопки не функционируют.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2014, 13:48
Ответы с готовыми решениями:

[C++] Добавление пунктов к кнопке стиля "с выпадением" (TBSTYLE_REGISTERDR) на панели инструментов (dropdown button on toolbar)
Добрый день. Чистый WinAPI, без MFC и прочего. Создается панель инструментов с помощью вот...

"Copy", "Paste", "Delete" в контекстном меню
Доброго времени суток. Есть контекстное меню с кнопками &quot;Создать файл/папку&quot;, &quot;Копировать/...

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в...

Цель - при нажатии на кнопку создать еще одну кнопку. Ошибка "Button" не содержит определения для "Location" и "Text""
int Control ; private void Button2_Click(object sender, RoutedEventArgs e) {...

1
658 / 245 / 49
Регистрация: 20.11.2012
Сообщений: 542
30.06.2014, 18:08 2
Вот по быстрому накидал - все работает. Смотри правильно ли обрабатываются кнопки в WM_COMMAND.

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
#include "windows.h"
#include "commctrl.h"
 
#pragma comment(linker,"/ENTRY:wmain")
#pragma comment(linker,"/SUBSYSTEM:WINDOWS")
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
 
#define W_WIDTH 50
#define W_HEIGHT 250
 
HINSTANCE hInstance;
HWND hMainWnd;
HWND hwind[15];
 
#define ID_0  1000
#define ID_1  1001
#define ID_2  1002
#define ID_3  1003
#define ID_4  1004
#define ID_5  1005
#define ID_6  1006
#define ID_7  1007
#define ID_8  1008
#define ID_9  1009
 
LRESULT __stdcall WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HWND * CreateButtons(HWND hParent);
 
int __stdcall wmain()
{
    TCHAR * szClassName = L"basicWC";
    TCHAR * szAppName = L"WButtons";
 
    INITCOMMONCONTROLSEX icc;
    MSG msg;
 
    hInstance = GetModuleHandleW(NULL);
 
    WNDCLASSEXW wc;
 
    wc.cbSize = sizeof(WNDCLASSEXW);
    wc.hInstance = hInstance;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hIcon = 0;
    wc.hIconSm = 0;
    wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
    wc.lpszClassName = szClassName;
    wc.lpszMenuName = NULL;
    wc.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(243, 243, 247));
    wc.lpfnWndProc = WndProc;
 
    RegisterClassExW(&wc);
 
    hMainWnd = CreateWindowW(szClassName, szAppName, WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
        CW_USEDEFAULT, CW_USEDEFAULT, W_WIDTH, W_HEIGHT, 0, 0, hInstance, 0);
 
    ShowWindow(hMainWnd, SW_SHOWNORMAL);
    UpdateWindow(hMainWnd);
 
    icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icc.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&icc);
 
    while (GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
 
 
LRESULT __stdcall WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
 
    HDC hDC;
    PAINTSTRUCT ps;
 
    switch (Msg)
    {
    case WM_CREATE:
        CreateButtons(hWnd);
        return 0;
 
    case WM_PAINT:
        hDC = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        return 0;
 
    case WM_CLOSE:
        PostQuitMessage(0);
        return 0;
 
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case ID_0:
            if (HIWORD(wParam) == BN_CLICKED)
            {
                MessageBoxW(hWnd, L"ID_0", L"", MB_OK);
                return 0;
            }
            break;
                
        case ID_1:
            if (HIWORD(wParam) == BN_CLICKED)
            {
                MessageBoxW(hWnd, L"ID_1", L"", MB_OK);
                return 0;
            }
            break;
        case ID_9:
            if (HIWORD(wParam) == BN_CLICKED)
            {
                MessageBoxW(hWnd, L"ID_9", L"", MB_OK);
                return 0;
            }
            break;
        default:
            break;
        }
    default:
        break;
    }
    return DefWindowProcW(hWnd, Msg, wParam, lParam);
}
 
HWND * CreateButtons(HWND hParent)
{
    for (int i = 0; i < 10; i++)    
        hwind[i] = CreateWindowW(WC_BUTTON, L"", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
                    5, i * 20 + 5, 50, 15, hParent, (HMENU)(1000 + i), hInstance, NULL);
    
    return hwind;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2014, 18:08

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

<input type="submit" value="button" onClick="">
Если в HTML коде есть токой фрагмент &lt;input type=&quot;submit&quot; value=&quot;button&quot; onClick=&quot;&quot;&gt;, что можно...

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Ошибка "System.Windows.Forms.Button" не содержит определения для "Items"
Как решить данную ошибку? &quot;System.Windows.Forms.Button&quot; не содержит определения для &quot;Items&quot; и не...

"System.Windows.Forms.Button" не содержит определение для "Checked"
Ребят помогите пожалуйста! &quot;System.Windows.Forms.Button&quot; не содержит определение для &quot;Checked&quot;. Не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.