Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
BlackOwl
5 / 5 / 3
Регистрация: 23.12.2014
Сообщений: 90
1

Почему после нажатия на кнопку ничего не происходит?

03.02.2015, 14:17. Просмотров 505. Ответов 6
Метки нет (Все метки)

1) почему после нажатия на кнопку ничего не происходит, и почему она сразу не отображается
2) как избавиться от мерцания во время изменения размеров окна
3) посоветуйте что еще нужно исправить

P.s сразу прошу прощения за стиль кода, я еще начинающий

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
#include <windows.h>
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
HWND button;
HWND child, child2;
char szClassName[] = "Mywindow";
 
int x = 180,
    y;
int xg = 544,
    yg = 600;
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HBRUSH hBrush, hBrush2; //создаём объект-кисть
    hBrush = CreateSolidBrush(RGB(255,250,67)); 
    hBrush2 = CreateSolidBrush(RGB(255,0,67));
 
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl, wincl2;
    
    wincl.hInstance = hThisInstance; // стиль окна
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) hBrush;
 
    if (!RegisterClassEx (&wincl))
        return 0;
    
    hwnd=CreateWindowEx(0,
                        szClassName,
                        "Заголовок",
                        WS_OVERLAPPEDWINDOW, //WS_POPUP - окно без заголовка и обводки
                        0,
                        0,
                        xg,
                        yg,
                        NULL,
                        NULL,
                        NULL,
                        NULL);
  
    
    
    
    child = CreateWindowEx(0, szClassName,"Список дисков",
                                WS_CHILD | WS_VISIBLE | WS_BORDER/*| WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VSCROLL | WS_CLIPCHILDREN | WS_POPUP*/,
                                -1, 
                                -1, 
                                x, 
                                yg+1, 
                                hwnd, 
                                0,
                                0,
                                NULL);
    
    child2 = CreateWindowEx(0, szClassName,"Список дисков",
                                WS_CHILD | WS_VISIBLE | WS_BORDER/*| WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VSCROLL | WS_CLIPCHILDREN | WS_POPUP*/,
                                x-2, 
                                -1, 
                                xg-x-13, //размер по горизонтали 
                                yg+1, 
                                hwnd, 
                                0,
                                0,
                                NULL);
        
    button=CreateWindow("button",
                        "Пуск",
                        WS_VISIBLE|WS_CHILD,
                        0,
                        0,
                        35,
                        35,
                        child,
                        NULL,
                        NULL,
                        NULL);
 
  ShowWindow (hwnd,nFunsterStil);
  
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
 
    return messages.wParam;
}
 
            
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
       
        case WM_COMMAND:
             if ((HWND)lParam == button)
             {
             MessageBox(NULL,"привет","Сообщение",0);
             }
             break;
       
        case WM_SIZING:
            RECT rect;
            GetWindowRect(hwnd, &rect);
            SetWindowPos(child2, (HWND)NULL, x, y, (rect.right - rect.left)-x, (rect.bottom - rect.top)-y, SWP_NOMOVE);
            SetWindowPos(child, (HWND)NULL, 0, 0, x, (rect.bottom - rect.top)-y, SWP_NOMOVE);
            break;
        case WM_PAINT:
           
            PAINTSTRUCT ps;
            BeginPaint(child2, &ps );
            FillRect( ps.hdc, &ps.rcPaint, (HBRUSH)(COLOR_GRAYTEXT+13));
            EndPaint(child2, &ps );
        break;
         case WM_DESTROY:
            PostQuitMessage (0);
            break;
 
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 14:17
Ответы с готовыми решениями:

Блокировать кнопку после нажатия на нее
как заблокировать кнопку после нажатия на неё ? EnableWindow(hButton, 0) не...

Почему ничего не рисуется при получении?
Там где получаю сообщение WM_SETCURSOR или пробовал WM_MOUSEMOVE координаты...

почему так происходит
Господа пытаюсь удалить запись из реестра с названием &quot;uu&quot;,а у меня удаляется...

После нажатия кнопки ничего не происходит
Всем доброго дня! Подскажите, пожалуйста, в чем проблема данного кода. После...

После ввода в turbo pascal данного кода и нажатия сtrl+F9 ничего не происходит...
Всем привет. Начал недавно изучать turbo pascal и сразу возникли проблемы....

6
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
03.02.2015, 16:13 2
BlackOwl кнопка сразу не появляется потому что ты не обновляешь окно
UpdateWindow(hwnd);
по нажатию ничего не происходит потому что ты не обрабатываешь нажатие
0
BlackOwl
5 / 5 / 3
Регистрация: 23.12.2014
Сообщений: 90
03.02.2015, 17:36  [ТС] 3
mh-coder, можешь подсказать как обработать нажатие?
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
03.02.2015, 19:00 4
Цитата Сообщение от BlackOwl Посмотреть сообщение
mh-coder, можешь подсказать как обработать нажатие?
например так

C++ (Qt)
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
#include <windows.h>
 
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
HWND button;
HWND child, child2;
wchar_t szClassName[] = L"Mywindow";
 
int x = 180,
    y;
int xg = 544,
    yg = 600;
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HBRUSH hBrush, hBrush2; //создаём объект-кисть
    hBrush = CreateSolidBrush(RGB(255,250,67)); 
    hBrush2 = CreateSolidBrush(RGB(255,0,67));
 
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl, wincl2;
    
    wincl.hInstance = hThisInstance; // стиль окна
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) hBrush;
 
    if (!RegisterClassEx (&wincl))
        return 0;
    
    hwnd=CreateWindowEx(0,
                        szClassName,
                        L"Заголовок",
                        WS_OVERLAPPEDWINDOW, //WS_POPUP - окно без заголовка и обводки
                        0,
                        0,
                        xg,
                        yg,
                        NULL,
                        NULL,
                        NULL,
                        NULL);
  
    
    
    
    child = CreateWindowEx(0, szClassName,L"Список дисков",
                                WS_CHILD | WS_VISIBLE | WS_BORDER/*| WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VSCROLL | WS_CLIPCHILDREN | WS_POPUP*/,
                                -1, 
                                -1, 
                                x, 
                                yg+1, 
                                hwnd, 
                                0,
                                0,
                                NULL);
    
    child2 = CreateWindowEx(0, szClassName,L"Список дисков",
                                WS_CHILD | WS_VISIBLE | WS_BORDER/*| WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VSCROLL | WS_CLIPCHILDREN | WS_POPUP*/,
                                x-2, 
                                -1, 
                                xg-x-13, //размер по горизонтали 
                                yg+1, 
                                hwnd, 
                                0,
                                0,
                                NULL);
        
    button=CreateWindow(L"button",
                        L"Пуск",
                        WS_VISIBLE|WS_CHILD,
                        0,
                        0,
                        35,
                        35,
                        child,
                        (HMENU)1277,
                        hThisInstance,
                        NULL);
 
  ShowWindow (hwnd,nFunsterStil);
  UpdateWindow(hwnd);
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
 
    return messages.wParam;
}
 
            
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
       
        case WM_COMMAND:
             if (wParam == 1277)
             {
             MessageBox(NULL,L"привет",L"Сообщение",0);
             }
             break;
 
        
 
       
        case WM_SIZING:
            RECT rect;
            GetWindowRect(hwnd, &rect);
            SetWindowPos(child2, (HWND)NULL, x, y, (rect.right - rect.left)-x, (rect.bottom - rect.top)-y, SWP_NOMOVE);
            SetWindowPos(child, (HWND)NULL, 0, 0, x, (rect.bottom - rect.top)-y, SWP_NOMOVE);
            break;
        case WM_PAINT:
           
            PAINTSTRUCT ps;
            BeginPaint(child2, &ps );
            FillRect( ps.hdc, &ps.rcPaint, (HBRUSH)(COLOR_GRAYTEXT+13));
            EndPaint(child2, &ps );
        break;
         case WM_DESTROY:
            PostQuitMessage (0);
            break;
 
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
0
BlackOwl
5 / 5 / 3
Регистрация: 23.12.2014
Сообщений: 90
04.02.2015, 10:19  [ТС] 5
mh-coder, так тоже ничего не происходит
0
mh-coder
-36 / 29 / 4
Регистрация: 01.02.2014
Сообщений: 839
04.02.2015, 10:42 6
Цитата Сообщение от BlackOwl Посмотреть сообщение
mh-coder, так тоже ничего не происходит
просходит, посмотри через дебагер, и вобще лучше почитай учебник, например рихтера, потому что то что ты написал - реальный бред
0
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
07.02.2015, 23:22 7
Цитата Сообщение от BlackOwl Посмотреть сообщение
так тоже ничего не происходит
попробуй использовать другую конструкцию перехвата сообщений от кнопок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
case WM_COMMAND:
 {
    swith(LOWORD(wParam))
       {
          case 1277:
              {
                 MessageBoxW(HWND_DESKTOP, L"Hello!", L"Message", MB_OK);
 
              break;}
 
     }
 
break;}
Так же предпоследним параметров в функции создании главного окна укажи хендл программы (HINSTANCE)
0
07.02.2015, 23:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2015, 23:22

После нажатия на кнопку внутри вкладки происходит нежелательное перемещение на первую
Доброго времени суток подскажите я делаю вкладки на одной из вкладок весит...

Почему паскаль не работает, после того как пишу ничего не происходит? Может программа неправильная?
Program abc; Var a:Smallint; N:Integer; Begin N:=0; Read(a); While (a&lt;&gt;0)...

почему после второго нажатия на кнопку вылетает ошибка?
using System; using System.Collections.Generic; using System.ComponentModel;...


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

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

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