Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
#1

WIN32 - C++

06.01.2009, 16:44. Просмотров 1194. Ответов 6
Метки нет (Все метки)

Здравствуйте, знатоки)) Вы всегда даёте такие отличные советы, помогите и сейчас, пожалуйста))

Моя курсовая делится на 2 этапа: 1ый - написать шаблонный класс стек, а 2ой - перенести этот класс в среду windows, чтобы все функции стека выполнялись + соответствующий интерфейс.

В принципе, 1ая часть у меня написана, с интерфейсом во 2ой я тоже разобралась. Но как соединить первый файл со вторым ума не приложу!

Значение очередного элемента стека вводится в win, а потом что с ним делать? Вообще не понимаю алгоритм

И если можно, книжки какие-нибудь посоветуйте)) Я уже учиталась Финогеновым и Румянцевым, но легче, как видите, мне поти не стало) Помогите блондинке
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2009, 16:44     WIN32
Посмотрите здесь:

С++ Win32 API C++
win32 vs CLR C++
Макросы, win32 API C++
Интерфес win32 MS VS 10 C++
Отличие CLR от Win32 C++
C++ Win32 Mfc отличия
win32 project C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
06.01.2009, 18:41     WIN32 #2
1ый - смотри std::stack
2ой - пиши кроссплатформенный код
И вообще, причем тут win?
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
06.01.2009, 20:02  [ТС]     WIN32 #3
Цитата Сообщение от Spo1ler Посмотреть сообщение
1ый - смотри std::stack
2ой - пиши кроссплатформенный код
И вообще, причем тут win?
Ну вот курсовая заключается в этом: пользователь выбирает файл-добавить элемент, всплывает диалоговое окно - введите элемент. Пользователь вводит. Затем он может нажать "Показать стек" и на экран выведется нарисованный прямоугольником стек, в котором хранятся числа - элементы стека.
И я не знаю, как это сделать или хотя бы где можно это прочитать. У преподавателя спросить возможности не имею, т.к. увижу нескоро, а с курсовой особо не потянешь.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
06.01.2009, 22:58     WIN32 #4
Ты имеешь ввиду, что ты не знаешь как отобразить? Дык нет проблем: воспользуйся GTKmm+cairomm или Qt. Будет и кроссплатформенно и красиво.
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
07.01.2009, 16:41  [ТС]     WIN32 #5
Честно говоря, я не очень знаю, что это такое

Добавлено через 11 часов 59 минут 26 секунд
Вот такой вопрос:
я ввожу с клавиатуры какое-то число. Как передать его в функцию push()?

Добавлено через 5 часов 3 минуты 18 секунд
1ая часть:

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
#
 
include <iostream.h>
#include <new.h>
 
 
#include "stdafx.h"
 
 
template <class StkType> class stack 
{
    unsigned int top; //вершина стека
    StkType stck[100]; 
    StkType *s;
 
 
public:
    stack();
    ~stack() ;
    void push(StkType obj);
    StkType pop();
    unsigned int stckSize();
};
 
template <class StkType> stack <StkType>::stack()
{ 
    //try{                        //контроль выделения памяти  new
        s = new StkType [1000];//выделение памяти под массив 1000 элементов
/*  } catch (bad_alloc xa){
        cout<<"Memory error!\n";
    }*/
        top = NULL;
}
 
template <class StkType> stack <StkType>::~stack()
{
    delete s;       //контроль за удалением памяти
    try
    {
        if (!s) throw 1.0;
    }
    catch (double i) {cout<<"Memory error!\n";}
} 
 
 
template <class StkType> void stack <StkType>::push(StkType obj) 
{ //заталкивание эл-та в стек
    stck[top] = obj;
    top++;
}
 
template <class StkType> StkType stack <StkType>::pop() 
{ //выталкивание эл-та из стека
    try{                                  //ГЇпроверка стека на пустоту
        if (top == 0) throw 10;
    }
    catch (int i) {cout<<"Stack is empty!\n";}
    top--;
    return stck[top];
}
 
template <class StkType> unsigned int stack <StkType>::stckSize() 
{  //размер
    return top;
    
}
 
 
int main() 
{
    stack<int> s;
    unsigned int a = s.stckSize();
    return 0;
}
и вторая:

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
HINSTANCE hInst;                                
TCHAR szTitle[MAX_LOADSTRING];                   
TCHAR szWindowClass[MAX_LOADSTRING];
BOOL obj;            
 
 
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK Add(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    
    MSG msg;
    HACCEL hAccelTable;
    
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_MYFIRST, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MYFIRST);
 
    
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 
    return msg.wParam;
}
 
/*ðåãèñòðГ*öèÿ ГЄГ«Г*Г±Г±Г* ГЈГ«Г*ГўГ*îãî îêГ*Г**/
 
ATOM MyRegisterClass(HINSTANCE hInstance) 
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX); 
 
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MYFIRST);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = (LPCSTR)IDC_MYFIRST;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
 
    return RegisterClassEx(&wcex);
}
 
/*ÑîçäГ*ВёГ¬ ГЈГ«Г*ГўГ*îå îêГ*Г® ГЁ äåëГ*ГҐГ¬ ГҐГЈГ® âèäèìûì*/
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; 
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
}
 
/*ГЋГЄГ®Г*Г*Г*Гї ГґГіГ*êöèÿ ГЈГ«Г*ГўГ*îãî îêГ*Г**/
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
 
    switch (message) 
    {
        
        case WM_COMMAND:
            wmId    = LOWORD(wParam); 
            wmEvent = HIWORD(wParam); 
            switch (wmId)
            {
                case IDM_ADD:
                   DialogBox(hInst, (LPCTSTR)IDD_ADDBOX, hWnd, (DLGPROC)Add);
                   
                   break;
                case IDM_ABOUT:
                    DialogBox(hInst, (LPCTSTR)IDD_ABOUT, hWnd, (DLGPROC)About);
                    break;
                case IDM_SHOW:
                     break;
 
                case IDM_EXIT:
                   DestroyWindow(hWnd);
                   break;
                default:
                   return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            RECT rt;
            GetClientRect(hWnd, &rt);
            DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
            EndPaint(hWnd, &ps);
            break;
        
        case WM_CLOSE:
            if (MessageBox(hWnd, "Âû óâåðåГ*Г», Г·ГІГ® õîòèòå âûéòè?", "", MB_YESNO|MB_ICONQUESTION)==IDYES)
                DestroyWindow(hWnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
 
 
LRESULT CALLBACK Add(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    
    
    switch (message)
    {
        case WM_INITDIALOG:
            obj = GetDlgItemInt(hDlg, IDC_EL1, 0, TRUE);/*я пытаюсь выяснить, 
какое значение было введено в диалоговое окно,
 передать его глобальной переменной, 
чтобы потом передать в стек. И это у меня не получается.
 Что я не так делаю?*/
            
         
                return TRUE;
 
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK) 
            {
                
                EndDialog(hDlg, LOWORD(wParam));
                
            }
            if (LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
    }
    return FALSE;
}
 
 
 
    
 
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
                return TRUE;
 
        case WM_COMMAND:
            {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
            }
            break;
    }
    return FALSE;
}
И ещё у меня вопрос: как присоединить первый файл ко второму? как добавить в проект *.cpp файл я выяснила, а *.h как?
Я там что-то поделала, и у меня в принципе всё скомпилировалось без ошибок, но в первой части, если откомментировать проверку выделения памяти

C++
1
2
try{  s = new StkType [1000]:} catch (bad_alloc xa){
        cout<<"Memory error!\n";}
, то возникают ошибки:

error C2061: syntax error : identifier 'bad_alloc'
error C2310: catch handlers must specify one type
error C2317: 'try' block starting on line '25' has no catch handlers

Что с этим делать???%)
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.01.2009, 17:05     WIN32 #6
C++
1
2
3
#include<new>
. . .
(std::bad_alloc &xa)
?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2009, 19:07     WIN32
Еще ссылки по теме:

C++ Win32 с++ visual studio
Win32 или QT C++
C++ namespace System в Win32
Кириллица WIN32 CA C++
C++ WinForms и Win32

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

Или воспользуйтесь поиском по форуму:
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
07.01.2009, 19:07  [ТС]     WIN32 #7
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
2
3
#include<new>
. . .
(std::bad_alloc &xa)
?
нет, всё равно те же ошибки

Добавлено через 2 минуты 52 секунды
я попробовала убрать #include "stdafx.h", вылезла ошибка "fatal error C1010: unexpected end of file while looking for precompiled header directive"
Мне кажется, это связано с тем, то для 1ой части у меня нет заголовочного файла, но я не знаю, как его корректно присоединить к приложению
Yandex
Объявления
07.01.2009, 19:07     WIN32
Ответ Создать тему
Опции темы

Текущее время: 15:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru