powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Только не смейтесь...
11 сообщений из 11, страница 1 из 1
Только не смейтесь...
    #33082849
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я впервый раз сел за c++. Хорошо знаком с C#, однако не помогает... Создал DialogBased Application, понатыкал кнопок с edit-ами. Вопрос. А как сделать так, чтоб по нажатию на кнопку в edit-е появилась надпись "надпись"?
(а может надо было не DialogBased Application?)
Ниже в исходнике уже есть обработчик события click.

Код: plaintext
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.
// dialbaseDlg.cpp : implementation file
//

#include "stdafx.h"
#include "dialbase.h"
#include "dialbaseDlg.h"
#include ".\dialbasedlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CdialbaseDlg dialog



CdialbaseDlg::CdialbaseDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CdialbaseDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CdialbaseDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CdialbaseDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
	ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
END_MESSAGE_MAP()


// CdialbaseDlg message handlers

BOOL CdialbaseDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CdialbaseDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CdialbaseDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()),  0 );

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon +  1 ) /  2 ;
		int y = (rect.Height() - cyIcon +  1 ) /  2 ;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CdialbaseDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CdialbaseDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
}

void CdialbaseDlg::OnEnChangeEdit1()
{
	// TODO:  If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.

	// TODO:  Add your control notification handler code here
}

...
Рейтинг: 0 / 0
Только не смейтесь...
    #33082863
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, кстати... VisualStudio .Net (7.1...)
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33082963
valhala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В просто винде пришлось бы искать хэндл контрола и вызывать Set\GetWindowText. А тут mfc. Главное удобство- с контролом (типа того же едита) можно связать переменную двух типов- 1)Класса Элемента управления , 2) Класса данных. Вот в Вашем случае удобно сопоставить с едитом переменную класса CString. Делается это по правой кнопке на элементе упр-я, в дизайнере формы- выбираем "Add Variable...". Там в Category и выбираем тип класса- Value. В Variable Type оставляем CString. Ну и Variable name- имя.
Терь самое главное- mfc не синхронизирует значения этих "навязанных" переменных, и то, что есть в эл-тах упр-я на самом деле. Этот момент определяется разработчиком. Чтобы установить текст в едите- надо сделать так(пусть переменную назвали m_editSalut):
m_editSalut="Salut!";
this->UpdateData(FALSE); // СИНХРОНИЗАЦИЯ переменная->контрол
Тут this - для ясности- указатель на объект диалога.
Ну а чтоб получить из контрола:
this->UpdateData(TRUE);
И в m_editSalut будет то, что в контроле на форме.
Дааа, это не шарп :))
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33084198
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2valhala :)
А вообще как на c++ пишут GUI, неужели везде и всюду CreateWindow(...)? Зачем? Почему не использовать визуальное средство, как в Borland-е? Я так понял, DialogBasedApplication - это не серьёзно. В отличии от C#, Pascal, Delphi, VB etc., я чего-то логику вообще не понимаю... Например в дизайнере форм в Dialog-е я кнопке даю Caption, ну например "Вася_Пупкин", потом начинаю поиском по проекту (по всем документам проекта) искать словосочетание "Вася_Пупкин" и... не нахожу :-0 ?!?!? Куда девается? И вообще посоветуйте, с чего начать, а то я как полный идиот уже 2 дня за VS сижу и ничего не понимаю, что страшно - ЛОГИКУ не понимаю, сам синтаксис-то и алфавит не проблема, но вот СУТЬ не понимаю. Книги напокупал - ответов нет. Чувствую так мне с этого места не уйти. :-(
Помогите
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33084291
valhala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, при работе с ms VC++ надо держать в голове понимание как работает gui(и не только) винды. Все, что мы имеем в голом сишнике и винде- это хэндлы объектов, которые создаём в операционке и список функций, которые на входе имеют эти хэндлы (грубо так сказал;). ms VC++ в виде mfc- это всего лишь классы c++ (именно так, и это даёт нам много хорошего- от этих плюсов:), которые внутри и хранят (инкапсулируют- о как:) хэндлы объектов ОС. Кажется, что всё слишком сложно..., но, когда немного вкупаешься, понимаешь, какая это свобода :)). Хотя, конечно, писать прогу, в которой нет "шаг_вправо/влево", в студии может быть не так удобно, как в, например шарпе или дельфи-билдере, НО, можно творить всё, что хочешь! :) (хотя, многие поспорят, что и там это всё можно- согласен, но там, это не родное).
... Вот. Про то, что DialogBasedApplication не серьёзно- так это смотря что надо. Там в mfc есть реализация mdi/sdi, и в качестве отображения имееца view, построенный на диалоге.
... То, что Вася_Пупкин не ищется- так тут снова надо вспомнить, что мы имеем дело с ресурсами (!) диалога. Так в винде в .exe (и .dll тоже) хранится это всё- внутри проги, но отдельно от кода (есть ещё и String Tables- удобная штука поддерживать интернациональность:). Для интереса можете посмотреть формат PE.
... То, что не понимаете- все (очень имхо! :) через это проходили, редко удаётся нахрапом взять :).
... Что-то книжек особенно хороших припомнить не могу (везде по-немногу). Важно туда смотреть, когда капнёте глубже- типа какие где макросы объявить, чтоб класс поддерживал сериализацию, и т.п.
... Да, и ещё, многие не считают, что mfc хорошая библиотека, но другого особо и нету (была когда-то у борланда owl, да кончилась уже давно).
... И вот встречный вопрос- а зачем писать на c++? Такое жёсткое тз?
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33084296
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smathcopmА вообще как на c++ пишут GUI, неужели везде и всюду CreateWindow(...)? Зачем?
Нет, везде и всюду CreateWindow() если пишут на чистом WinAPI. В нормальной ситуации используют библиотеки в которых все уже сделано. В тех же Delphi такой библиотекой является VCL.
MS VC++ предлагает в качестве стандартной библиотеки, библиотеку классов MFC. При желании можно все писать на ней. А если не нравится MFC (я ее ненавижу :)) То можно взять что-нибудь другое, например QT от Trolltech (www.trolltech.com), лучшая на сегодня GUI библиотека как мне кажется.

smathcopmПочему не использовать визуальное средство, как в Borland-е? Я так понял, DialogBasedApplication - это не серьёзно.
Ну почему же несерьезно? Все зависит от задачи.
Например когда задача состоит на 99% из обработки данных, а визуальная часть ограничивается одним окном с парой-тройкой контролов (окно отчета, прогресс-бар и кнопка отмены) можно послать все библиотеки нафиг и пользоваться одними только CreateWindow() Получится все очень просто и легко.

smathcopmВ отличии от C#, Pascal, Delphi, VB etc., я чего-то логику вообще не понимаю... Например в дизайнере форм в Dialog-е я кнопке даю Caption, ну например "Вася_Пупкин", потом начинаю поиском по проекту (по всем документам проекта) искать словосочетание "Вася_Пупкин" и... не нахожу :-0 ?!?!? Куда девается?
Ну во первых, нету такого понятия как "документ проекта", есть "исходные файлы" :) Скорее всего этот текст на кнопке лежит внутри одного из *.rc файлов Плюс учти в какой кодировке ты этот текст писал...

smathcopmИ вообще посоветуйте, с чего начать, а то я как полный идиот уже 2 дня за VS сижу и ничего не понимаю, что страшно - ЛОГИКУ не понимаю, сам синтаксис-то и алфавит не проблема, но вот СУТЬ не понимаю. Книги напокупал - ответов нет. Чувствую так мне с этого места не уйти. :-(
Помогите
Ты не понимаешь суть C++ или GUI от Windows?
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33084304
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2White Owl: Скорее с++, точно c++.

2valhala: Да вот, когда-то, решил для себя, что надо бы язык программирования выучить для решения математических задач, коих было выше крыши (и осталось), так первое, что попалось c++ :) ... он меня так напугал, что ещё полтора года у меня вообще всякое желание отпало (я ни с чем кроме HTML vs JavaScript vs CSS vs Apache знаком не был). Вторая попытка привела меня к Sharp-у и засасало (о его плюсах могу часами говорить). Ну а там... многое пробывал, мучал asm (точнее он меня). Но вдруг появилась возможность устроиться на работу программистом, но на... vs.net cpp! (Повезло же ;-)) Такой шанс! Ну... и... вот...
Не знаю как там с работай (таких не берут в космонавты!), но познакомиться с c++ хочется уже из принципа.
Пока сплошные разочарования:
1) Русский на кнопках не отображается - проблемы с локализацией;
2) Нет встроенного контрола таблицы - идём к неповоротливым сторонним разработкам;
3) Второй час пытаюсь сконвертировать float в string (_ecvt(),_gcvt() - у них куча непонятных аргументов) - то ли я дурак, то ли... на этом мысль остнавливается;
4) В MSDN всё о .Net, но мало о mfc - плохо;
5) Какие-то глюки в среде с Undo/Redo - совсем плохо;
6) Поначалу рассмешило

Код: plaintext
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.
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by dialbase.rc
//
#define IDM_ABOUTBOX                    0x0010
#define IDD_ABOUTBOX                     100 
#define IDS_ABOUTBOX                     101 
#define IDD_DIALBASE_DIALOG              102 
#define IDR_MAINFRAME                    128 
#define IDC_BUTTON1                      1000 
#define IDC_EDIT1                        1001 
#define IDC_BUTTON2                      1003 
#define IDC_EDIT2                        1004 
#define IDC_EDIT3                        1005 
#define IDC_HOTKEY1                      1008 
#define IDC_EDIT4                        1009 

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE         129 
#define _APS_NEXT_COMMAND_VALUE          32771 
#define _APS_NEXT_CONTROL_VALUE          1010 
#define _APS_NEXT_SYMED_VALUE            101 
#endif
#endif

- В жизни бы не догодался каждому контролу присваивать id-шники, а потом использовать их в качестве ссылки на него.

Одно радует, Ваши valhala наставления оОочень мне помогли. Правда. Спасибо. Но это не конец с вопросами...
* Кстати, а можно в c++ использоать низкоуровневые включения?
* А библиотеки, написаные на билдере полностью совместимы со студией?

P.S.: Да и кстати программу для работы с матрицами с полным графическим решением и его распечаткой (горжусь), я всё-таки сделал на шарпе, не зря видать мучался...
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33084660
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smathcopm
* А библиотеки, написаные на билдере полностью совместимы со студией?

Смотря что это за библиотеки:
если lib-ы, то нет; если dll-ки, то (обычно) да...
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33085992
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smathcopm2White Owl: Скорее с++, точно c++.
Тогда забудь о С++ и возьми С. Научись работать с ним сначала, потом имея базу из С и С# будет намного легче разобраться с C++.
Забудь на время про окошки, кнопочки и диалоги. Поиграйся с чисто расчетными задачами. Научись работать с указателями.
С++ это дикая мешанина из процедурного и объектного типа языков, использовать его можно только тогда когда четко понимаешь в каком месте объекты, а где низкоуровневые указатели.

smathcopm* Кстати, а можно в c++ использоать низкоуровневые включения?
Если под "низкоуровневыми включениями" понимать куски ассемблерного кода вставленые прямо в исходный текст - да, на некоторых компиляторах это возможно, на некоторых невозможно. И это никогда не нужно :)

smathcopm* А библиотеки, написаные на билдере полностью совместимы со студией?
Смотря какие :) Библиотеки классов в исходниках частично совместимы. В некоторых местах прийдется делать правки. Сам С++ одинаков, но команды управляющие процессом компиляции и линковки разные.
Откомпилированные библиотеки (*.obj и *.lib) не совместимы вообще.
А динамические (*.dll) обычно совместимы, но их с легкостью можно сделать несовместимыми.
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33087405
valhala
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За принципиальность- решпект :)
Знание с++ никогда не повредит. Из того, что используется на рынке, он наверное самый мощный (я не беру в расчёт какие-нить SmallTalk или PL1)
Шарп- эт уже новое поколение. Тут даже не столько язык важен, а сам .net framework. А вобще, обычно люди идут с++ -> шарп - грубо говоря, от более трудоёмкого, к более удобному. У Вас же наоборот- кого хочешь такое может напугать. Но, ещё раз повторюсь- всё окупится. Даже просто небольшой опыт работы в с++, но уверенное его знание даст Вам более чёткое понимание того же дот нета. А основное там (как верно Вам тут выше подсказали) это указатели, классы (разберитесь полностью, такого в шарпе не найдёте), шаблоны- лучшая книга- Страуструп. Но это долго.
>1) Русский на кнопках не отображается - проблемы с локализацией;
Да, у меня это тоже глюка есть- во время создания проекта надо указать locale (у меня вобще китайский становится по-дефолту). Можно изменить и в уже созданом проекте- по-моему- правая мышь на ресурсе диалога- свойства. Ну там разберётесь.
>2) Нет встроенного контрола таблицы - идём к неповоротливым сторонним >разработкам;
Эт да :)) Но, вобще-то, есть COM- но пользовать Вам его сейчас будет, наверное, трудновато. Кстати, вот что ещё даёт mfc. То есть это обёртки не только над гуи, но и над много ещё чем.
>3) Второй час пытаюсь сконвертировать float в string (_ecvt(),_gcvt() - у них >куча непонятных аргументов) - то ли я дурак, то ли... на этом мысль >остнавливается;
Есть такие ф-ции (правда сишные) itoa/ltoa - всё в строку, первая из int, вторая- из float.
>4) В MSDN всё о .Net, но мало о mfc - плохо;
Можно где-нить надыбать старый msdn- там было хорошо :))
Из сайтов был не плох codeguru.com (может есть русский аналог, не знаю)
5) Какие-то глюки в среде с Undo/Redo - совсем плохо;
>6) Поначалу рассмешило
>В жизни бы не догодался каждому контролу присваивать id-шники, а потом >использовать их в качестве ссылки на него.
Да, дельфи-шарпы всё это скрывают, но тем не менее оно всё равно работает именно так :)) Но хорошо, что уже Вас это не пугает.

Не бойтесь- прыгайте туда с головой, будет трудно, но оооочень интересно :))
Приятно помочь людям из Питера ;))
...
Рейтинг: 0 / 0
Только не смейтесь...
    #33087856
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
угумс, тоже знакомился с шарпом после сишника. Глянул ихний helloworld, почесал репу, подумал: "Ох, нихсебе халява". В сишнике для меня самое трудное было преобразование типов, но достаточно было разобрать сильно навороченный пример из книжки Страуструпа (только она синенькая, тоненькая, много слов, мало кода, очень понравилась) и всё стало понятно. С мфц знакомился по сайту firststeps, там написано, как прогать под мфц лапками, а если по-умному, обработчики и переменные гуёв вешаются мышкой. В общем, первых шагов мне хватило, чтобы с грехом пополам быстро написать своё первое приложение на мфц.
3) Второй час пытаюсь сконвертировать float в string (_ecvt(),_gcvt() - у них куча непонятных аргументов)
Странно, всю жизнь sprintf юзал - достаточно универсальная вещь.
1) Русский на кнопках не отображается - проблемы с локализацией;
хммм... у меня такого не было, но по-умному следует юзать юникод wchar_t*, если не ошибаюсь. Чтобы прога не зависела от кривых региональных настроек винды (типа как у тебя).
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Только не смейтесь...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]