Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI FtpGetCurrentDirectory WinInet.h ошибка https://www.cyberforum.ru/ win-api/ thread1203690.html
Здравствуйте. Решил сделать небольшую систему обновления для файлов. Столкнулся с тем что FtpGetCurrentDirectory всегда завершается ошибкой 122 (ERROR_INSUFFICIENT_BUFFER, не достаточно размера) и... попробуйте так: //... TCHAR CurrentPath; DWORD dw=MAX_PATH; FtpGetCurrentDirectory(hInternetConnect,CurrentPath,&dw); //...
C++ WinAPI Программа, постоянно считывающая буфер обмена Пришла в голову идея считывать с буффера обмена все подряд . Можно ли ,считывать и вставлять в ClipBoard все в двоичном виде ? тобишь как есть независимо от формата . Как можно наблюдать за... Qazan, Vista+ : Adding a Window to the Clipboard Viewer Chain, и ловишь WM_DRAWCLIPBOARD https://www.cyberforum.ru/ win-api/ thread1201826.html
C++ WinAPI Как открыть картинку через фотошоп? https://www.cyberforum.ru/ win-api/ thread1200993.html
Программа создает картинку и сохраняет ее на диск, нужно открыть ее в фотошопе программным путем, как это сделать? Про CreateProcess() и ShellExecute() я знаю, вопрос именно в том, как прописать... Возможно, что можно через командную строку ФШ, возможно, что через реестр ветки ФШ, но для этого надо знать возможности самого этого ФШ, которые в него вложили. Добавлено через 14 часов 18 минут...
Ошибка при запуске приложения из приложения WinAPI C++ WinAPI
Здравствуйте. Есть следующий код, найденный на просторах интернета. int main(int argc, char **argv) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb =... Уже почитал :) у меня сегодня руки быстрее головы...
Вывод графа в WINAPI C++ WinAPI
Здравствуйте , не у кого не завалялся вывод графа на экран с помощью winapi и его обходы ?? что то искал по форуму и не нашел ( я писал программку в которой просто вводишь матрицу и там ищутся... что не кто не может помочь ?
C++ WinAPI Ввод текста в во внешнем приложении
Мое почтение, Как реализовать ввод текста в поля username и password во внешнем приложении? Как их идентифицировать?
C++ WinAPI Как узнать, использует окно DirectX или OpenGL? Подскажите, можно ли узнать по дескриптору, использует окно DirectX или OpenGL? Или для этого нужно использовать сторонние библиотеки? MastAKK, ищите из всех импортируемых библиотек d3d9.dll (d3d11.dll) или opengl32.dll. Выводите список функций этих библиотек, ищите функции для создания устройства (к примеру D3D11CreateDevice). https://www.cyberforum.ru/ win-api/ thread1202114.html C++ WinAPI Ввод с клавиатуры https://www.cyberforum.ru/ win-api/ thread1199547.html
Помогите пожалуйста разобраться с программой. При запуске выдает такую ошибку - fatal error LNK1120: 1 неразрешенных внешних элементов вот код #include "stdafx.h" #include "windows.h" #include... Возможно не правильно создан проект.
C++ WinAPI Не удается полностью закрыть программу, при закрытии окна программы https://www.cyberforum.ru/ win-api/ thread1202160.html
Всем привет! У меня есть функция WinMain, в которой есть классический бесконечный цикл на проверку сообщений от пользователя. Я создал отдельную функцию, которая находится внутри этого бесконечного... 1) Зачем вообще нужен WndProc, если вся работа с сообщениями может происходить в бесконечном цикле внутри любой из функций?Так удобнее. Управление окнами отвязывается от цикла.2) Что должна...
C++ WinAPI Изучение WinAPI https://www.cyberforum.ru/ win-api/ thread1201580.html
Добрый вечер. Начал изучать WinApi, но как увидел код простого окна, то немного очумел=-O Расскажите кто как его учил и посоветуйте как лучше изучать, ведь что бы написать код одного окна, это же... 1. Именно он и есть самое трудное в изучении WinAPI. Все остальное намного легче. Начните лучше с такого проекта (это его код целиком) #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance,...
C++ WinAPI Регион удаляется сам по себе https://www.cyberforum.ru/ win-api/ thread1200869.html
Здравствуйте. Я создаю анимацию в окне STATIC. К окну прикреплён регион. При создании регион есть. Когда включатся анимация, то регион удаляется. Код: //В WM_CREATE hProgBar = CreateWindowEx(0,... Приветствую! - вы покажите: "WndProc"
C++ WinAPI Зачем восстанавливать алиасы? Или имелось ввиду что то другое? Функция GetConsoleAlias, первое же предложение в описании параметра: The console alias whose text is to be retrieved. , Консоль псевдоним которого текст должен быть восстановлен.. Но это же не... to retrieve - это извлекать, вообще-то, а не восстанавливать. А нужна эта функция для того, чтобы после назначения алиаса через AddConsoleAlias, получить, собственно, строку Target и имя... https://www.cyberforum.ru/ win-api/ thread1201650.html
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 6
0

Создать немодальный диалог - C++ WinAPI - Ответ 6295793

09.06.2014, 17:45. Показов 1844. Ответов 1
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу, в которой используется диалог для работы со структурами данных, определяющими списки. Ввод элементов данных осуществляется с помощью окна редактирования Edit Box. Состояние списка выводится в окно списка List Box. Элемент списка удаляется, если по нему дважды щелкнуть курсором мыши.

Виды структур данных: очередь (S1).
Тип данных элементов: int (T2).
Вид диалога: немодальный (D2).


Вот пример. Нужно заменить из примера на вышеупомянутые критерии.
C++
1
2
3
4
5
6
7
#define IDM_DIALOG1 100
#define IDM_HELP 102
#define ID_EB1 400
#define ID_LB1 301
#define IDM_INSERT 200
#define IDM_DELETE 201
#define IDM_SHOW 202
Файл ресурсов rgz12.rc

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
#include <windows.h>
#include "list.h"
// немодальный диалог
MYMENU MENU     
{
  MENUITEM "&Dialog", IDM_DIALOG1
  POPUP "&List"
  {
        MENUITEM "&Insert",IDM_INSERT
        MENUITEM "&Delete",IDM_DELETE
        MENUITEM "&Show",IDM_SHOW
  }
  MENUITEM "Help",IDM_HELP
}
MYMENU ACCELERATORS         
{
    VK_F2,IDM_INSERT,VIRTKEY
    VK_F1,IDM_HELP,VIRTKEY
}
MYDB DIALOG 18,18,142,92
CAPTION "Диалог"      //заголовок окна
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE 
{
  DEFPUSHBUTTON  "Ввод",IDOK,52,45,60,14,   //кнопка ввод
    WS_CHILD | WS_VISIBLE | WS_TABSTOP
  PUSHBUTTON "Завершение диалога",IDCANCEL,52,65,80,14,
    WS_CHILD | WS_VISIBLE | WS_TABSTOP
  EDITTEXT ID_EB1, 68, 8, 72, 12, ES_LEFT | //editbox
    ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER |
    WS_TABSTOP
  LISTBOX ID_LB1, 2,10,47,80, LBS_NOTIFY |      //list box
    WS_CHILD | WS_VISIBLE | WS_BORDER |
    WS_VSCROLL | WS_TABSTOP
}



Текст программы rgz12.cpp

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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "list.h"
 
// прототипы функций и глобальные переменные
 
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK DialogFunc   (HWND,UINT,WPARAM,LPARAM);
char szWinName[] = "Lists";
HINSTANCE hInst;
int X=0, Y=0;
int maxX,maxY;
HDC memdc;
HBITMAP hbit;
HBRUSH hbrush;
TEXTMETRIC tm;
HWND hDlg; // немодальный диалог
char str[80];
int i;
struct slink {char *e; slink *next;};
slink* list1=NULL;
// вставка нового элемента
slink *insert( slink *lst, char *a)
{
  slink *prev=lst, *p= new slink;
  p->e = new char[strlen(a)+1];
  strcpy(p->e,a); p->e[strlen(a)+1]='\0';
  p->next = NULL;
  if(lst==NULL) return p;
  while(lst->next!=NULL)
  {
    lst =lst->next;
  }
  lst->next = p;
  return prev;
}
// удаление элемента
slink *del( slink *lst)
{
  slink *p=lst;
  if(lst)
  {
        lst = lst->next; delete p;
  }
  return lst;
}
slink *del_num( slink *lst, int n)
{
  slink *p=lst, *q;
  if (n==0) return lst=del(lst);
  for(i=0; i<n; i++)
  {
     q=p;   p = p->next;
  }
  if (p!=NULL)
  {
   q->next=p->next;
   delete p;
  }
  return lst;
}
void sh(HDC hdc, slink *lst )
{
          Y=0;
          PatBlt(hdc,0,0,maxX,maxY,PATCOPY);
          while(lst!=NULL)
          {
                sprintf(str, "%s", lst->e);
                TextOut(memdc, X, Y, str, strlen(str));
                Y = Y+ tm.tmHeight+tm.tmExternalLeading;
                lst=lst->next;
          }
}
 
 
int WINAPI WinMain(HINSTANCE hThisInst,
    HINSTANCE hPrevinst,
    LPSTR lpszArgs,
    int nWinMode)
{
  HWND hwnd;
  MSG msg;
  WNDCLASS wcl;
  HACCEL hAccel;
 
  wcl.hInstance = hThisInst;
  wcl.lpszClassName = szWinName;
  wcl.lpfnWndProc= WindowFunc;
  wcl.style = 0;
 
  wcl.hIcon = LoadIcon (NULL, IDI_APPLICATION); //иконка
  wcl.hCursor = LoadCursor(NULL,IDC_ARROW); //курсор
  wcl.lpszMenuName = "MYMENU";          //меню
 
  wcl.cbClsExtra = 0;
  wcl.cbWndExtra = 0;
//фон
  wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 
  if(!RegisterClass(&wcl))
    return 0;
//создадим окно
  hwnd = CreateWindow(szWinName,
    "Dialogs",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    HWND_DESKTOP,
    NULL,
    hThisInst,
    NULL);
 
  hInst = hThisInst;
  hAccel = LoadAccelerators(hThisInst,"MYMENU");//подключим акселераторы
 
  ShowWindow(hwnd,nWinMode); //отобразить окно
  UpdateWindow(hwnd);
// обработка акселераторов
  while(GetMessage(&msg,NULL,0,0))
  {
   if (!IsDialogMessage(hDlg, &msg)) // немод
   {
    if(!TranslateAccelerator(hwnd,hAccel,&msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
   }
  }
  return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT paintstruct;
  char *txt;
  switch(message)
  {
    case WM_CREATE:
        maxX= GetSystemMetrics(SM_CXSCREEN);
        maxY= GetSystemMetrics(SM_CYSCREEN);
      X=maxX/2;
    hdc = GetDC(hwnd);  //получить DC
      memdc= CreateCompatibleDC(hdc);
      hbit= CreateCompatibleBitmap(hdc,maxX,maxY);
      SelectObject(memdc,hbit);
      hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);
      SelectObject(memdc,hbrush);
      PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
      GetTextMetrics(memdc,&tm);
      ReleaseDC(hwnd,hdc);  //освободить  DC
      break;
    case WM_COMMAND:
      switch (LOWORD (wParam))
    {
        case IDM_DIALOG1:
        //DialogBox(hInst,"MYDB",hwnd, (DLGPROC)DialogFunc);
       CreateDialog(hInst, "MYDB",hwnd, (DLGPROC)DialogFunc); // немод
        break;
        case IDM_INSERT:
         txt=new char[4];
         sprintf(txt, "%3d", random(1000));
         list1=insert(list1,txt);
         sh(memdc,list1);
         InvalidateRect(hwnd,NULL,1);
         break;
        case IDM_DELETE:
                list1=del(list1);
            sh(memdc, list1);
        InvalidateRect(hwnd,NULL,1);
        break;
        case IDM_SHOW:
          GetTextMetrics(memdc,&tm);
          sh(memdc, list1);
        InvalidateRect(hwnd,NULL,1);
          break;
      case IDM_HELP:
        MessageBox(hwnd,"\nПосле ввода данных"
       "\n в окно редактирования нажмите ENTER","Help",MB_OK);
        break;
    }
    break;
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&paintstruct);  //get dc
        BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
        EndPaint(hwnd,&paintstruct);        //release DC
        break;
    case WM_DESTROY:
            DeleteDC(memdc);
        PostQuitMessage(0);     //сообщение о завершении
        break;
    default:                    //обработка остальных сообщений
    return DefWindowProc(hwnd,message,wParam,lParam);
  }
  return 0;
}
 
void list_show (slink *lst, HWND hwnd)
{
slink*  lst_tmp = lst;
    while (lst_tmp!=NULL)
    {
        SendDlgItemMessage(hwnd, ID_LB1,
        LB_ADDSTRING,0,(LPARAM)(lst_tmp->e));
            lst_tmp = lst_tmp->next;
    } ;
}
 
BOOL CALLBACK DialogFunc(HWND hdwnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam)
{
  long i;
  slink* lst_tmp;
  switch(message)
  {
    case WM_COMMAND:
      switch (LOWORD(wParam))
      {
        case IDCANCEL:
        //EndDialog(hdwnd,0);
        DestroyWindow(hdwnd); // немод
          return 1;
        case ID_LB1:
          if(HIWORD(wParam)==LBN_DBLCLK)
          {
            i = SendDlgItemMessage(hdwnd,ID_LB1,LB_GETCURSEL,0,0L);
            sprintf(str,"Индекс выбранного элемента = %d",i);
            MessageBox(hdwnd,str,"Выбор сделан",MB_OK);
            list1=del_num(list1,i);
            SendDlgItemMessage(hdwnd,ID_LB1,LB_DELETESTRING,i,0L);
          }
       return 1;
        case IDOK:
        GetDlgItemText(hdwnd, ID_EB1, str,80);
          if (strlen(str))
        {
                list1 = insert(list1,str);
            SendDlgItemMessage(hdwnd, ID_LB1,
            LB_ADDSTRING,0,(LPARAM)str);
          }
      }
      return 1;
    case WM_INITDIALOG:
    list_show(list1, hdwnd);
      return 1;
  }
  return 0;
}


Вернуться к обсуждению:
Создать немодальный диалог C++ WinAPI
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2014, 17:45
Готовые ответы и решения:

Как создать немодальный диалог на Win64 API?
Собственно в Win32 API все довольно легко, а с Win64 возникли траблы. Вот таким образом создаем на Win32 API. #include...

Немодальный диалог в DLL
Пытаюсь в функции DLL создать немодальный диалог с помощью CreateDialog. Функция возвращает ошибку 1813 (указанный тип ресурса в файле...

Заменить немодальный диалог на модальный
Всем привет. У меня появилась некоторая проблема, при изучении языка С++Bilder 6.0 Так как я пропустил некоторое кол-во пар ( я учусь в...

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2014, 17:45
Помогаю со студенческими работами здесь

Сабклассирование и немодальный диалог с нажатием ENTER/ESC
Проблема в использовании клавиш Enter и Escape при сабклассировании с испольщованием в качестве родителя - немодального диалога. (меню -...

Немодальный диалог для изменения цвета фона окна
Нужно создать немодальный диалог для изменения цвета фона главного окна. На окне диалога есть 3 элемента Slider и 3 элемента Edit для...

"Мертвый" немодальный диалог в WinAPI
В теле проги вызывается немодальное диалоговое окно: Ну и как обычно есть диалоговая процедура: BOOL CALLBACK...

Создать прозрачный диалог с кнопкой
Доброго времени суток. Необходимо сделать прозрачный диалог и кнопку. Кнопка должна быть либо прозрачной и на ней рисунок, либо как-то...

Как создать диалог выбора шрифтов?
Какими функция можно создать диалог выбора шрифтов? Можно еще пример

0
Новые блоги и статьи
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class - средства для работы с неизменяемыми структурами данных, каждое из которых предлагает свой уникальный подход к решению этой задачи. История их появления весьма. . .
Создание производительны­­х API с Java и gRPC
Wired 04.03.2025
В разработке производительность и масштабируемость микросервисных приложений играют ключевую роль. Традиционные REST API, несмотря на свою популярность и простоту, не всегда способны обеспечить. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 знаменует собой значительный скачок в развитии Java, внося фундаментальные улучшения в производительность, безопасность и удобство разработки. Релиз включает множество революционых изменений,. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Современная блокчейн-разработка на Java предоставляет разработчикам широкий спектр возможностей. В отличие от Solidity, который ограничен экосистемой Ethereum, Java позволяет создавать как. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
Tестирование Pull Request в Kubernetes с помощью vCluster
stackOverflow 03.03.2025
При работе с микросервисной архитектурой критически важно обеспечить качественное тестирование каждого изменения перед его слиянием в основную кодовую базу. Однако тестирование Pull Request в. . .
Использование пакета Context в Golang
bytestream 03.03.2025
Управление параллельными процессами в современных приложениях - сложная задача, особенно когда речь идет о микросервисной архитектуре и распределенных системах. Пакет context в Go - это гибкое. . .
WebAssembly и Go: Работа с DOM и обработка ошибок
bytestream 03.03.2025
WebAssembly представляет собой технологию, позволяющую запускать низкоуровневый код в браузере практически на нативной скорости. Особенно интересные возможности открываются при использовании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru