С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Blackaist
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
1

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

10.01.2013, 06:33. Просмотров 559. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 06:33
Ответы с готовыми решениями:

Функционал для Калькулятора (С++ WinApi)
Здраствуйте, на данный момент я сделал оболочку для калькулятора и не знаю как сделать функционал,...

Написать программы для решения задач
Ребят, помогите, пожалуйста! Нужно написать программы в С++ для решения этих задач: 1. Дана...

Написать 3 программы
16 вариант.

Скоро аттестация, а программы написать все не могу(((
Скоро будут ставить аттестацию, а программы написать не могу - плохо усвоил тему((. Помогите...

Алгоритм программы шифрования данных может кто написать?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;time.h&gt;...

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

Твой каркас - это бред. Его допиливать надо еще, половина с Юникодом, половина - без. Знаешь, как окно выглядит, если запустить не на русской Windows? Полюбуйся:
0
Миниатюры
Написать функционал для программы  
Blackaist
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
10.01.2013, 11:37  [ТС] 3
Хз, у меня все нормально было. Сам тестировал :3
Я про функционал WinAPI мало знаю, ну вот например.
Как запилить ввод с клавиатуры? В то поле (в любое) надо ввести число, и вывести это число на экран. Желательно через переменные, так как там несколько полей
http://trueimages.ru/img/8d/68/7773d3a76b793884457a77db4d9.jpg
0
Blackaist
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
12.01.2013, 01:19  [ТС] 4
Спасибо за помощь!
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
12.01.2013, 06:17 5
Цитата Сообщение от 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
Blackaist
0 / 0 / 1
Регистрация: 06.01.2013
Сообщений: 7
12.01.2013, 13:13  [ТС] 6
Ты не совсем понял меня или я тебя не так понял =)
Мне надо в это поле (там где у тебя число высвечивалось, не в консоли [в самом окне]) ввести какое-то число и чтобы оно выводилось (в этом же окне).
Проще говоря, программу "наоборот" нужно
Вводишь в строку эту миллиард и где-то (по типу TextOut'а, но она наверное не способна на это) и в этом же окне появляется надпись с миллиардом. И самое главное! Чтобы второй раз нельзя было вводить (ну или можно, но значения не должны будут заноситься)
А так спасибо, хоть чуть-чуть приоткрыл занавесу алчности и тайн WinAPI
0
kravam
быдлокодер
1710 / 897 / 105
Регистрация: 04.06.2008
Сообщений: 5,561
12.01.2013, 14:14 7
Если говорить про мою программу, то убери консоль и вводи в поле редактирования что угодно.
Понимаешь, я слышу твой вопрос, как:

"Как ввести в окно редактирования что-то, что бы оно там было"
Цитата Сообщение от Blackaist Посмотреть сообщение
[в самом окне]) ввести какое-то число и чтобы оно выводилось (в этом же окне).
Ну не знаю как. На клавиши нажимать надо, как ещё-то...
0
12.01.2013, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 14:14

Какую библиотеку использовать для написания программы для моделирования
Собственно в заголовке всё написано. Сразу скажу,что я пользовался поисковиком и нашёл казалось...

Написать прогу, которая должна вызываться при запуске какой-то программы с CD-ROM
Приветствую участников форума! Надеюсь на вашу помощь, поскольку куда обратиться еще я не знаю....

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


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

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

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