Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI Как полечить ошибку "Stack around the variable 'name' was corrupted"? https://www.cyberforum.ru/ win-api/ thread1185245.html
подскажите как полечить ошибку? LRESULT CALLBACK MainDlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case WM_COMMAND:
Winrar - програмное добавление файла C++ WinAPI
ShellExecute(hWnd, L"Open", L"WinRar", L"WinRAR a C:\FILE.RAR *.", L"", SW_SHOW); При такой команде из VS2010 Winapi - не может в архив добавить файлы пишет что архив не найден, я уже рпобовал создать архив сам и пути к нему прописал ???
C++ WinAPI Как изучить работу с ком-портом, если его нет https://www.cyberforum.ru/ win-api/ thread1184911.html
Добрый вечер, уважаемые. Поступило задание от руководства: научиться работать с ком-портом. Можно ли сделать это так же, как делается с TCP/IP? Т.е. создаем сервер, начинаем слушать сокет, на этом же компе запускаем клиент и шлем в сокет данные. С Сом-портом такой подход прокатит (мастер и слэйв на одном компе)? Или надо физическое наличие порта и подключение к нему? Спасибо.
C++ WinAPI Не понятные замечания к функции GenerateConsoleCtrlEvent вызывает обработчика управления функции процессов в целевой группе, чтобы назватьhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms683155%28v=vs.85%29.aspx. https://www.cyberforum.ru/ win-api/ thread1184396.html
Красивый trackbar с заполнением одной из областей C++ WinAPI
Хочу создать красивый trackbar. Создать получилось, но я еще хочу чтобы при изменении положения слайдера, менялось выделения на самой полосе. Что-то такого типа hwndTrack = CreateWindowEx( TBS_TRANSPARENTBKGND, TRACKBAR_CLASS , L"Trackbar Control", WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS | ...
C++ WinAPI Записать пару байт в конец файла PNG Есть файл PNG-файл test.png, в который мне нужно дописать, допустим, произвольные пять байт после определенного маркера. Как мне это сделать? Бьюсь уже три часа с проблемой, многое перепробовал. Сначала пытался открыть файл для бинарной записи, ничего не получается почему-то, выдает ошибку.ofstream f("3domlogo.png", ios::out | ios::binary); if(f) { printf("succeeded"); f.close(); }... https://www.cyberforum.ru/ win-api/ thread1184296.html
C++ WinAPI ToolBar Нет пункта добавить ToolBar в ресурсах главное это есть когда создаю другие проекты (Даже консольные ) а в моем главном проекте нет ,как так перетаскивать все в другой проект это муторность так как много чего уже напилено https://www.cyberforum.ru/ win-api/ thread1183532.html Найти подключенное устройство в реестре C++ WinAPI
Добрый день. Не могу найти в реестре подключенный мп3 плеер, подскажите где искать. Нужно в реестре поставить флажок на запрет подключения пм3-шников и иных съемных носителей. С флешкой разобрался, написал небольшую програмку которая меняет значение соответствующего поля. Можно ли аналогично сделать с мп3 или там иная ситуация? Спасибо.
C++ WinAPI Фильтр с использованием checkbox и radiobutton Здравствуйте. Помогите плиз решить проблемы с выбором по указанным параметрам. То есть у меня есть табличка с характеристиками антивирусов. Есть форма, как на скриншоте. И нужно, чтобы при выборе правильно выбирался антивирус. Как это грамотно сделать? Начал делать через if-else, понял, что бред. Может как-то с массивами удастся? Идей в башке вообще нету :( Но ведь как-то делают тесты с... https://www.cyberforum.ru/ win-api/ thread1182656.html C++ WinAPI Открытие окна по щелчку кнопки на другом окне https://www.cyberforum.ru/ win-api/ thread1182149.html
пытаюсь вызвать перекрывающееся окно по щелку кнопки, распологающемся на основном окне, вызов пытаюсь сделать через // Делаем окно видимым ShowWindow(OwnedHwnd, nCmdShow); // Посылаем в окно сообщение WM_PAINT UpdateWindow(OwnedHwnd);
Работа с процессами и потоками в Windows C++ WinAPI
Создать приложение, запускающее пять дочерних потоков. Каждый поток выполняет вывод сообщения об уровне своего приоритета, а затем выводит цифры своего порядкового номера. Повысить приоритет одного из потоков на 2. Понизить приоритет одного из потоков на 1. Принудительно завершить поток, имеющий наименьший приоритет. (в Borland C++)
C++ WinAPI Запретить блокноту сохранение файла Всем доброго времени суток, прошу помощи у гуру c++, я полный 0 в кодинге и бьюсь головой об стену уже неделю..У меня такое задание, нужно перехватить окно блокнота и не дать ему сохранять файл, я додумался, что с помощью spy ++, можно узнать класс требуемого окна, потом с помощью функции Findwindow, можно найти все окна, которые соответствуют имени класса окна, дальше как я думаю, нужно... https://www.cyberforum.ru/ win-api/ thread1182052.html
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 9
0

Удаление сообщения msg из программной очереди - C++ WinAPI - Ответ 6215211

23.05.2014, 11:54. Показов 1145. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый лень. Пишу шахматы в локальной сети, краткое содержание алгоритма коего привожу:\

Обрабатываю нажатие левой кнопки мыши, делаю соответствующие выводы, и если нужно, изменяю положение фигур на доске. После чего посылаю ход противнику и там же, ожидаю его хода, обрабатываю и выхожу из обработчика.

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

Пытался использовать EnableWindow, но без толку.

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

На всякий случай, код обработчика(осторожно, говнокод):
Кликните здесь для просмотра всего текста

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
185
186
187
188
189
            case WM_LBUTTONDOWN :{
                EnableWindow(hGameWindow, false);
                /*if (IsWindowEnabled){
                    MessageBox(hGameWindow, "Disabled", " ", MB_OK);
                }*/
                UpdateWindow(hGameWindow);
                if (processing == true){
                    MessageBox(hGameWindow, "Сейчас не ваш ход, подождите.", "You're doing bad", MB_OK);
                    break;
                }
                if(curGame.getState() == PREGAME){
                    MessageBox(hGameWindow,"Соединение не установлено - у вас нет оппонента.\nПерейдите в раздел <Новая игра>.","You're doing bad",MB_OK);
                    EnableWindow(hGameWindow, true);
                    break;
                }
                if(curGame.getTurn() != curGame.getPlayerID()){
                    if(curGame.getPlayerID() == CLIENT_ID && first){
                        string str(curGame.getString());
                        curGame.ParseString(str);
                        curGame.DrawAll();
                        InvalidateRect(hGameWindow,NULL,true);
                        curGame.setTurn();
                        EnableWindow(hGameWindow, true);
                        return 1;
                    }
                    MessageBox(hGameWindow,"Сейчас не ваш ход, подождите.","You're doing bad", MB_OK);
                    break;
                }
                else{
                    processing = true;
                    int xpos = GET_X_LPARAM(lParam);
                    int ypos = GET_Y_LPARAM(lParam);
                    if(xpos <= 50 || xpos >= 450 || ypos <= 50 || ypos >= 450)
                        break;
                    //Если фигура еще не выбрана
                    if(curGame.getHand() == EMPTY_HAND){
                        choosefirst = Desk[xpos/50 - 1][8 - ypos/50];
                        if(choosefirst.first == curGame.getPlayerID()){
                            posscells.erase(posscells.begin(),posscells.end());
                            //vector<pair<int,int>> posscells;
                            posscells = choosefirst.second.GetPossCells(choosefirst.second.getiType());
                            //Отрисовать возможные клетки
                            curGame.DrawAll();
                            choosefirst.second.DrawPossCells(posscells,hMem);
                            //Выделить рамкой отдельной выбранную фигуру
                            curGame.setHand();
                            InvalidateRect(hGameWindow,NULL,true);
                            EnableWindow(hGameWindow, true);
                            processing = false;
                            break;
                        }
                        else{
                            MessageBox(hGameWindow,"Трогая чужие фигуры не победишь.","You're doing bad", MB_OK);
                            EnableWindow(hGameWindow, true);
                            processing = false;
                            break;
                        }
                    }
                    if(curGame.getHand() == FULL_HAND){
                        choosesecond = Desk[xpos/50 - 1][8 - ypos/50];
                        //Если перевыбрали фигуру
                        if(choosesecond.first == curGame.getPlayerID()){
                            posscells.erase(posscells.begin(),posscells.end());
                            //vector<pair<int,int>> posscells;
                            posscells = choosesecond.second.GetPossCells(choosesecond.second.getiType());
                            //Отрисовать возможные клетки
                            curGame.DrawAll();
                            choosesecond.second.DrawPossCells(posscells,hMem);
                            //Выделить рамкой отдельной выбранную фигуру
                            choosefirst = choosesecond;
                            //curGame.setHand();
                            InvalidateRect(hGameWindow,NULL,true);
                            EnableWindow(hGameWindow, true);
                            break;
                        }
                        //Проверить, сможем ли дойти до этого поля
                        //Если да, сделать ход
                        //Если нет, вывести месседжбокс
                        //Передать ход на другой комп
                        vector<pair<int,int>>::iterator t;
                        t = find(posscells.begin(),posscells.end(),make_pair(xpos/50 - 1,8 - ypos/50));
                        if(t != posscells.end()){
                            //Не приведет ли наш ход к шаху в нашу сторону
                            //Есть ход, все нормуль
                            /*if(Figures[choosefirst.second.getIndex()].Move(xpos/50-1,8-ypos/50) == false){*/
                            if(Figures[choosefirst.second.getIndex()].Move(xpos/50-1,8-ypos/50) == false){
                                MessageBox(hGameWindow,"Под шах своего короля поставить жеж","You're doing bad",MB_OK);
                                EnableWindow(hGameWindow, true);
                                break;
                            }
                            //Если ход сделан, отрабатывает шахи/маты/паты
                            else{
                                curGame.DrawAll();
                                InvalidateRect(hGameWindow,NULL,true);
                                UpdateWindow(hGameWindow);
                                //Если есть шах в сторону противника
                                //Проверим, не мат ли это
                                if(curGame.getState() == GAMEWHITECHECK +curGame.getPlayerID()){
                                    int EnemyKingID = 31 - curGame.getPlayerID();
                                    //posscells = Figures[EnemyKingID].GetPossCells(EnemyKingID);
                                    posscells = Figures[EnemyKingID].GetPossCells(6);
                                    //Если шах дан и король не может идти 
                                    if(curGame.checkMate(posscells,EnemyKingID)){
                                        curGame.SetState(GAMEBLACKMATE);
                                        tosend = curGame.CreateString(choosefirst.second,xpos/50-1,8-ypos/50);
                                        curGame.setHand();
                                        curGame.SendString(tosend);
                                        MessageBox(hGameWindow,"MAT","Белые победили",MB_OK);
                                    }
                                }
                                else{
                                    if(curGame.checkDraw()){
                                        curGame.SetState(GAMEDRAW);
                                        tosend = curGame.CreateString(choosefirst.second,xpos/50-1,8-ypos/50);
                                        curGame.setHand();
                                        curGame.SendString(tosend);
                                        MessageBox(hGameWindow,"MAT","НИЧЬЯ",MB_OK);
                                    }
                                }
                                if(curGame.getState() == GAMEBLACKCHECK +curGame.getPlayerID()){
                                    int EnemyKingID = 31 - curGame.getPlayerID();
                                    //posscells = Figures[EnemyKingID].GetPossCells(EnemyKingID);
                                    posscells = Figures[EnemyKingID].GetPossCells(6);
                                    //Если шах дан и король не может идти 
                                    
                                    if(curGame.checkMate(posscells,EnemyKingID)){
                                        curGame.SetState(GAMEWHITEMATE);
                                        tosend = curGame.CreateString(choosefirst.second,xpos/50-1,8-ypos/50);
                                        curGame.setHand();
                                        curGame.SendString(tosend);
                                        MessageBox(hGameWindow,"MAT","Черные победили",MB_OK);
                                    }
                                }
                                else{
                                    if(curGame.checkDraw()){
                                        curGame.SetState(GAMEDRAW);
                                        tosend = curGame.CreateString(choosefirst.second,xpos/50-1,8-ypos/50);
                                        curGame.setHand();
                                        curGame.SendString(tosend);
                                        MessageBox(hGameWindow,"ПAT","Ничья",MB_OK);
                                    }
                                }
                            }
                            /*int yy = choosefirst.second.getHoriz();
                                int xx = choosefirst.second.getVert();
                                Desk[xpos/50-1][8-ypos/50] = make_pair(choosefirst.first,Figures[choosefirst.second.getIndex()]);
                                Desk[xx][yy] = emptycell;
                                curGame.checkCheck();*/
                                //curGame.setHand();
                            //Где-то тут послать ход
                            tosend = curGame.CreateString(choosefirst.second,xpos/50-1,8-ypos/50);
                            curGame.setHand();
                            MessageBox(hGameWindow, "Ход сделан", "Ожидайте ответного хода", MB_OK);
                            if(curGame.SendString(tosend)){
                                curGame.setTurn();
                            }
                            string str(curGame.getString());
                            curGame.ParseString(str);
                            curGame.DrawAll();
                            InvalidateRect(hGameWindow,NULL,true);
                            UpdateWindow(hGameWindow);
                            if(curGame.getState() == GAMEBLACKMATE){
                                int result = MessageBox(hGameWindow,"Черные победили. Разрываем соединение, выходим в начальное окно", "Мат", MB_OK);
                                //if(result == ){
 
                                //}
                            }
                            if(curGame.getState() == GAMEWHITEMATE){
                                int result = MessageBox(hGameWindow,"Белые победили. Разрываем соединение, выходим в начальное окно", "Мат", MB_OK);
                                //if(result == ){
 
                                //}
                            }
                            curGame.setTurn();
                            EnableWindow(hGameWindow, true);
                            processing = false;
                            break;
                        }
                        else{
                            MessageBox(hGameWindow,"Невозможный ход жеж","You're doing bad",MB_OK);
                            EnableWindow(hGameWindow, true);
                            break;
                        }
                            
                        break;
                    }
            
            }
        }


Вернуться к обсуждению:
Удаление сообщения msg из программной очереди C++ WinAPI
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2014, 11:54
Готовые ответы и решения:

Не отсылаются сообщения командой msg
Добрый день! Не отсылаются сообщения командой msg. 2 компа объединены в рабочую группу, друг...

Удаление сообщения с БД (Передача того самого $n сообщения и удаление)
Пишу легкий чатик, но возникла идея - удаление сообщения (-й) Вообщем, с помощью данного кода:...

Создание очереди и удаление элемента очереди по усмотрению пользователя
Вот код он создает очередь и должен удалить элемент очереди по усмотрению пользователя проблема...

Сервер очереди сообщения Майкрософт MSMQ
Не могу запустить службу очереди сообщений(win7 sp1 x64/установлены все актуальные...

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

Удаление элемента из очереди
И снова я со своими проблемами. решил,пока нет зацепок с теми задачами,что я не могу реализовать...

Удаление файлов по очереди
Всем привет. Не нашел решение проблемы.. Условие: Есть папка с файлами. Задача: Удалить...

Удаление элементов из очереди
Имеется часть кода: struct Spis2 { int info; Spis2 *next, *prev; }; void Del_5(Spis2...

Удаление элемента из очереди
у меня такая проблема.когда удаляю элемент из очереди то у меня удаляется вся очередь. type ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru