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

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

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

WIN32 - C++

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

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

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

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

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

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

win32 project - C++
Помогите мне разобрать в этих двух наименованиях: win32 project win32 console aplication Просто не могу понять разницу?

WinForms и Win32 - C++
Начал недавно изучать с++. 1) Консольные приложения - но тут все просто. Проблемы возникли именно с окнами. Как понял я - есть технология...

Кириллица WIN32 CA - C++
Добрый вечер! прошу помощи - возникла проблема с кириллицей VS 2008 Win32 CA есть txt файл, из которого считываю строки. Для сортировки...

Интерфес win32 MS VS 10 - C++
Помогите запихнуть прогу в мастер win32 в MS VS 10 Дело в том,сам мастер из элементов управления создает только контекстное меню ...

Win32 или QT - C++
Здравствуйте!! У меня к вам вопросик! Учил Си и С++ почти 1 год!Хочу работать программистом, что бы им стать нужно выбрать...

С++ Win32 API - C++
Подскажите книгу с самым доступным объяснением по данной теме. Что-то в роде "С++ за 21 день" только по Win32. Для чайников так сказать......

6
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
06.01.2009, 18:41 #2
1ый - смотри std::stack
2ой - пиши кроссплатформенный код
И вообще, причем тут win?
0
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
06.01.2009, 20:02  [ТС] #3
Цитата Сообщение от Spo1ler Посмотреть сообщение
1ый - смотри std::stack
2ой - пиши кроссплатформенный код
И вообще, причем тут win?
Ну вот курсовая заключается в этом: пользователь выбирает файл-добавить элемент, всплывает диалоговое окно - введите элемент. Пользователь вводит. Затем он может нажать "Показать стек" и на экран выведется нарисованный прямоугольником стек, в котором хранятся числа - элементы стека.
И я не знаю, как это сделать или хотя бы где можно это прочитать. У преподавателя спросить возможности не имею, т.к. увижу нескоро, а с курсовой особо не потянешь.
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
06.01.2009, 22:58 #4
Ты имеешь ввиду, что ты не знаешь как отобразить? Дык нет проблем: воспользуйся GTKmm+cairomm или Qt. Будет и кроссплатформенно и красиво.
0
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
07.01.2009, 16:41  [ТС] #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

Что с этим делать???%)
0
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
07.01.2009, 17:05 #6
C++
1
2
3
#include<new>
. . .
(std::bad_alloc &xa)
?
0
demure
0 / 0 / 0
Регистрация: 03.11.2008
Сообщений: 8
07.01.2009, 19:07  [ТС] #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ой части у меня нет заголовочного файла, но я не знаю, как его корректно присоединить к приложению
0
07.01.2009, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2009, 19:07
Привет! Вот еще темы с ответами:

Не является приложением WIN32 - C++
Написал игру Pac Man(Win 32). Подскажите пожалуйста что можно сделать чтобы не вылазила подобная ошибка? ...

Консольная менюшка win32 - C++
требуется: реализовать текстовое меню в котором можно перемещаться на суб меню и обратно, это сделал а вот со следующим пунктом проблемы. ...

Работа с графикой в (Win32) - C++
Помогите нарисовать домик)

Исходники Win32 Api - C++
У кого есть свои или знаете где их взять прошу скиньте ссылку. Книг хороших куча, но нужен самый простой шаблон с прямоугольником, что бы я...


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

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

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