Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7

Написать функционал для программы

10.01.2013, 06:33. Показов 1085. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня такой трабл случился, написат "каркар" для программы я смог, но с функционалом не пойму как работать.
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
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <shlwapi.h>
int n,k;
HINSTANCE hInst;
    HDC hdc;
    HFONT hf; 
    static LOGFONT font;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char szClassName[ ] = "CodeBlocksWindowsApp";
int WINAPI WinMain (HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow)
    {
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hInstance;
    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) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
hInst = hInstance;
    hwnd = CreateWindowEx (0, szClassName,
                           "Кучка", WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT, 544, 375,
                           HWND_DESKTOP, NULL, hInstance, NULL);
if( MessageBox(NULL,"Хотите сыграть в игру?","v0.3 Alpha",MB_YESNO)==IDYES){
    ShowWindow (hwnd, nCmdShow);
    
}
else return 0;
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
 
    return messages.wParam;
}
 
 
HFONT GetFont(HDC hdc)
{
    
   LOGFONT lf;
    HFONT hFont = (HFONT)GetCurrentObject(hdc, OBJ_FONT);
    GetObject(hFont, sizeof(LOGFONT), &lf);
 
    return CreateFontIndirect(&lf);
}
HCURSOR LoadCursorFromFile (LPCTSTR ORC_WAIT);
 
 
#define ID_EDIT_6    93
#define ID_EDIT_5    94
#define ID_EDIT_4    95
#define ID_EDIT_3    96
#define ID_EDIT_2    97
#define ID_EDIT_1    98
#define ID_EDIT      99
#define ID_BUTTON_0  100
#define ID_BUTTON_1  101
#define ID_BUTTON_2  102
#define ID_BUTTON_3  103
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        static HWND hButton, hButton1, hButton2, hButton3, hEdit[6], hListBox;
    PAINTSTRUCT ps;
    HDC hdc;
    
    switch (message)
    {
        case WM_CREATE:
            hEdit[6] = CreateWindow(_T("edit"), _T("1"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 70, 20, 20, 15, hwnd, (HMENU)ID_EDIT, hInst, 0);
            hEdit[0] = CreateWindow(_T("edit"), _T("2"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 70, 50, 20, 15, hwnd, (HMENU)ID_EDIT_1, hInst, 0);
            hEdit[1] = CreateWindow(_T("edit"), _T("+"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 200, 20, 20, 15, hwnd, (HMENU)ID_EDIT_2, hInst, 0);
            hEdit[2] = CreateWindow(_T("edit"), _T("-"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 200, 50, 20, 15, hwnd, (HMENU)ID_EDIT_3, hInst, 0);
            hEdit[3] = CreateWindow(_T("edit"), _T("4"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 230, 20, 20, 15, hwnd, (HMENU)ID_EDIT_4, hInst, 0);
            hEdit[4] = CreateWindow(_T("edit"), _T("5"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 230, 50, 20, 15, hwnd, (HMENU)ID_EDIT_5, hInst, 0);
            hEdit[5] = CreateWindow(_T("edit"), _T("29"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, 370, 35, 30, 15, hwnd, (HMENU)ID_EDIT_6, hInst, 0);
            
            hButton  = CreateWindow (_T("Button"), _T("1 столбец, 1 действие"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,  0, 170, 160, 50, hwnd, (HMENU)ID_BUTTON_0, hInst, 0);
            hButton1 = CreateWindow (_T("Button"), _T("1 столбец, 2 действие"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,  0, 230, 160, 50, hwnd, (HMENU)ID_BUTTON_2, hInst, 0);
            hButton2 = CreateWindow (_T("Button"), _T("2 столбец, 1 действие"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,  370, 170, 160, 50, hwnd, (HMENU)ID_BUTTON_1, hInst, 0);
            hButton3 = CreateWindow (_T("Button"), _T("2 столбец, 2 действие"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,  370, 230, 160, 50, hwnd, (HMENU)ID_BUTTON_3, hInst, 0);
            font.lfHeight = 15;
            font.lfWidth = 0; //use default value
            font.lfEscapement = 0; //without slope
            font.lfOrientation = 0;
            font.lfWeight = 10; //default
            font.lfItalic = 0;
            font.lfUnderline = 0;
            font.lfStrikeOut = 0;
            font.lfCharSet = DEFAULT_CHARSET;
            font.lfOutPrecision = OUT_DEFAULT_PRECIS;
            font.lfClipPrecision = CLIP_DEFAULT_PRECIS;
            font.lfQuality = DEFAULT_QUALITY;
            font.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE;
            strcpy(font.lfFaceName, "Arial");
            break;
            
        case WM_DRAWITEM:
            break;
            
        case WM_COMMAND:
                     if (LOWORD(wParam)==ID_BUTTON_0) {n+=1; printf("In 1 - %d, In 2 - %d\n",n,k);}//была нажата первая кнопка
                else if (LOWORD(wParam)==ID_BUTTON_1) {k+=1; printf("In 1 - %d, In 2 - %d\n",n,k);} //Если другая
                else if (LOWORD(wParam)==ID_BUTTON_2) {n+=2; printf("In 1 - %d, In 2 - %d\n",n,k);} //Если вообще другая
                else if (LOWORD(wParam)==ID_BUTTON_3) {k+=2; printf("In 1 - %d, In 2 - %d\n",n,k);} //Если совсем другая
            break;
                    
        case WM_PAINT:
          hdc = BeginPaint(hwnd, &ps);
          hf = CreateFontIndirect(&font);
          SelectObject(hdc, hf);
          TextOut(hdc, 10, 20, "1 столбец", 7);
          TextOut(hdc, 10, 50, "2 столбец", 7);
          TextOut(hdc, 10, 0, "Начальные числа", 15);
          TextOut(hdc, 130, 20, "1 действие", 10);
          TextOut(hdc, 130, 50, "2 действие", 10);
          TextOut(hdc, 185, 0, "Знаки и числа", 13);
          TextOut(hdc, 290, 15, "Максимальное число для победы", 29);
          DeleteObject(hf);
          EndPaint(hwnd, &ps);
          break;
        
        case WM_DESTROY:
          PostQuitMessage (0);
          break;
            
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);                
     }
   return 0;
}
Хотя пришлось чуть-чуть printf'а добавить, хотел посмотреть, будет работать или нет.

Добавлено через 5 часов 55 минут
C++
1
2
3
4
5
6
7
          TextOut(hdc, 10, 20, "1 столбец", 7);
          TextOut(hdc, 10, 50, "2 столбец", 7);
          TextOut(hdc, 10, 0, "Начальные числа", 15);
          TextOut(hdc, 130, 20, "1 действие", 10);
          TextOut(hdc, 130, 50, "2 действие", 10);
          TextOut(hdc, 185, 0, "Знаки и числа", 13);
          TextOut(hdc, 290, 15, "Максимальное число для победы", 29);
1 и 2. Вводят начальное количество камней в 1 столбце.
3. Обычная строка.
4,5 и 6 - Вводим числа и знаки действия с ними для столбцов (например: /5 первый столбец, +4 второй столбец)
Ну и 7, максимальное число для победы.
Если что-то не понятно, пишите.

Добавлено через 19 часов 49 минут
Программисты форума! Вы где?
Неужели вам это тяжело?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2013, 06:33
Ответы с готовыми решениями:

Определить функционал Аналогичный предикату MAPLIST для одноуровнего списка. (Используйте применяющий функционал FUNCALL)
определить функционал Аналогичный предикату MAPLIST для одноуровнего списка. (Используйте применяющий функционал FUNCALL). Заранее...

Написать программу для нахождения корня элементов списка используя функционал
Common Lisp

Определить, какой функционал у программы
Обнаружил на компе, доставшемся от другого человека странную программу на рабочем столе. Теперь ломаю голову для чего она. Несмотря на...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
10.01.2013, 11:19
Blackaist, чего надо-то? За тебя реализовывать функционал? Так это тебе нужно, а не нам. И правила известны тебе, а не нам. Ты делай, если столкнешься с чем-то, что не получается - говори, поможем, а так, "я написал тут каркас, а вы за меня доделайте остальное" - не пойдёт.

Твой каркас - это бред. Его допиливать надо еще, половина с Юникодом, половина - без. Знаешь, как окно выглядит, если запустить не на русской Windows? Полюбуйся:
Миниатюры
Написать функционал для программы  
0
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
10.01.2013, 11:37  [ТС]
Хз, у меня все нормально было. Сам тестировал :3
Я про функционал WinAPI мало знаю, ну вот например.
Как запилить ввод с клавиатуры? В то поле (в любое) надо ввести число, и вывести это число на экран. Желательно через переменные, так как там несколько полей
http://trueimages.ru/img/8d/68... 7db4d9.jpg
0
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
12.01.2013, 01:19  [ТС]
Спасибо за помощь!
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
12.01.2013, 06:17
Цитата Сообщение от Blackaist Посмотреть сообщение
Как запилить ввод с клавиатуры?
Всё просто на самом деле. Вводишь переменные с клавиатуры обычным способом, потом переформатируешь их в переменные char* и пихаешь их в нужные поля. В способе, показанном ниже окно программы создаётся, но его не видно, оно чёрт знает где, чуть ли не за всеми окнами, и разбираться почему так у меня нет ни малейшего желания.
про itoa посмотри здесь. Вроде всё.
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
#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
 
 
#define EditID 2
 
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
char ClassName       []= "SimpleWinClass";
char AppName         []= "Our First Window";
char EditClassName   []= "edit";
 
HINSTANCE hInstance;
LPSTR CommandLine;
HWND hwndButton;
HWND hwndEdit;
char buffer [512];
 
//Глобальная переменная
int x; 
 
int WINAPI WinMain (HINSTANCE hInst,
                    HINSTANCE hPrevInst,
                    LPSTR CmdLine,
                    int CmdShow)
 
{
 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 
 //А вот ты её вводишь с консоли
 printf ("введите число x ");
 scanf ("%d", &x);
 
 hInstance= hInst;
 CommandLine= CmdLine;
 //структуры
 WNDCLASSEX wc;
 MSG msg;
 HWND hwnd;
 
 //инициализация;
 wc.cbSize= sizeof (WNDCLASSEX);
 wc.style= CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc= WndProc;
 wc.cbClsExtra= 0;
 wc.cbWndExtra= 0;
 wc.hInstance= hInst;
 wc.hbrBackground= (HBRUSH)(COLOR_BTNFACE+1);
 wc.lpszMenuName= 0;
 wc.lpszClassName= ClassName;
 wc.hIcon= LoadIcon (NULL,IDI_APPLICATION);
 wc.hIconSm= wc.hIcon;
 wc.hCursor= LoadCursor (NULL,IDC_ARROW);
 
 
 RegisterClassEx (&wc);
 
 hwnd= CreateWindowEx (WS_EX_CLIENTEDGE, ClassName,AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,300,200,NULL,NULL,\
           hInst,NULL);
 
 ShowWindow (hwnd,SW_SHOWNORMAL);
 UpdateWindow (hwnd);
 
 
 
 while (true) {
   if (!GetMessage (&msg,NULL,0,0))
     break;
    TranslateMessage (&msg);
    DispatchMessage  (&msg);
 }
 return msg.wParam;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++
//hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  char bufer [16];
  
  if (uMsg==WM_DESTROY) 
      PostQuitMessage (0);
  else if (uMsg==WM_CREATE) {
      hwndEdit=   CreateWindowEx (WS_EX_CLIENTEDGE, EditClassName,NULL,\
      WS_CHILD + WS_VISIBLE + WS_BORDER + ES_LEFT +ES_AUTOHSCROLL,\
      50,35,200,25,hWnd,(HMENU)EditID,hInstance,NULL);
      
      SetFocus (hwndEdit);
      
      //А вот тут ты и вводишь в поле переменную X
      SetWindowText (hwndEdit, itoa(x,buffer,10));    
  }
  else 
      return DefWindowProc (hWnd,uMsg,wParam,lParam );      
  return 0;
}
1
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
12.01.2013, 13:13  [ТС]
Ты не совсем понял меня или я тебя не так понял =)
Мне надо в это поле (там где у тебя число высвечивалось, не в консоли [в самом окне]) ввести какое-то число и чтобы оно выводилось (в этом же окне).
Проще говоря, программу "наоборот" нужно
Вводишь в строку эту миллиард и где-то (по типу TextOut'а, но она наверное не способна на это) и в этом же окне появляется надпись с миллиардом. И самое главное! Чтобы второй раз нельзя было вводить (ну или можно, но значения не должны будут заноситься)
А так спасибо, хоть чуть-чуть приоткрыл занавесу алчности и тайн WinAPI
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
12.01.2013, 14:14
Если говорить про мою программу, то убери консоль и вводи в поле редактирования что угодно.
Понимаешь, я слышу твой вопрос, как:

"Как ввести в окно редактирования что-то, что бы оно там было"
Цитата Сообщение от Blackaist Посмотреть сообщение
[в самом окне]) ввести какое-то число и чтобы оно выводилось (в этом же окне).
Ну не знаю как. На клавиши нажимать надо, как ещё-то...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2013, 14:14
Помогаю со студенческими работами здесь

Написать функционал на лиспе
Добрый день, есть задача: написать на лиспе функционал, который по заданным списку L и атому x (x входит в L) выдает функцию f, которая...

Авторизация на сайте: разобрать функционал программы
На форуме уже несколько раз спрашивали как сделать авторизацию на каком-либо сайте. вот что я нашел копаясь в темах: Imports...

Написать функционал, создающий конкретную функцию
Добрый день. Рассмотрим такую функцию: (drop L N P) - удаляет N элементов с конца списка L, удовлетворяющих некоторому предикату...

Как написать функционал по-очереди farg s1 s2.sk?
Как написать функционал по-очереди farg s1 s2..sk,который применяет функцию farg сначала к первым элементам списков s1,s2...sk,затем - ко...

Написать программу для рисования данного орнамента, написать комментарии к каждому действию программы


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru