-
Visual C++ 2005 .NET
Купил себе книгу по Visual C++ 2005 (невизульный C++ уже в какой-то мере знаю). Но некоторые примеры кода не работают! И там написано далеко не все, что я хотел бы узнать... Если вам не трудно, ответьте на несколько вопросов:
1) MessageBox("Текст"); не работает. Компилятор пишет вот что:
[CODE]'CWnd::MessageBoxW' : cannot convert parameter 1 from 'const char [6]' to 'LPCTSTR'[/CODE]
Как с этим бороться?
2) Допустим, у меня есть компонент [I]Edit control[/I] и [I]Button[/I]. Как при нажатии [I]Button[/I] считать введённое в [I]Edit control[/I]?
3) Знаю, есть обработчики щелчков, двойных щелчков. Как их активизировать? И где можно найти более полный список событий?
Заранне спасибо.
-
[B]1)Про месадж бокси[/B]
MessageBox(_T("bla-bla-bla"));
У тебе активована опція "Use Unicode Libraries", тому і не виходило раніше.
[B]2)Про текст.[/B]
CString str; // сюди читаєш те, що у тебе в контролі
m_edit.GetWindowText(str); //читаємо в змінну [I][COLOR="Silver"](в переменную (рус) )[/COLOR][/I] str зміст
"едіта".
this->SetWindowText(str);
//Виводимо в заголовок зміст змінної str.
//m_edit - це змінна типу control для edit box'a.
(правою кнопкоъ по контролу - > AddVariable)
[B]3)Про кліки[/B]
Правою кнопкою на контрол -> Properties
Дивися в COntrolEvents або в Messages
Суто дружня порада - постав MSDN.
Це перший помічник будь-якого програміста.
-
Попробуйте Вашу строку записать в виде
[CODE]
TCHAR *pStr = _T("Hello World.");
[/CODE]
(тут возможно какие-то хедеры подключить нужно)
Или отключить юникод в настройках проекта.
-
Написал такой код:
[CODE]void Cxxx2Dlg::OnBnClickedOk()
{
CString str;
this->GetWindowText(str);
this->SetWindowText(str);
MessageBox(str);
}[/CODE]
MessageBox'ом выводится почему-то название проекта!
-
[QUOTE]MessageBox'ом выводится почему-то название проекта![/QUOTE]
или заголовок приложения, но в моём случае это одно и то же
-
[QUOTE=leviaphan;2743651]Написал такой код:
[CODE]void Cxxx2Dlg::OnBnClickedOk()
{
CString str;
this->GetWindowText(str);
this->SetWindowText(str);
MessageBox(str);
}[/CODE]
MessageBox'ом выводится почему-то название проекта![/QUOTE]
Ну ясна справа ! :)
Ти ж спочатку считуєш, ТЕ ЩО У ТЕБЕ В ЗАГОЛОВКУ, а потім його ж виводиш. :)
this - це, без заумних слів і є твій клас.
-
[QUOTE]this - це, без заумних слів і є твій клас.[/QUOTE]
да, я понимаю, что this-> - это указатель на данный класс.
Я пытался так
IDC_EDIT1.GetWindowText(str);
Пишет:
error C2228: left of '.GetWindowTextW' must have class/struct/union
-
IDC_EDIT1 - это имя компонента Edit control
-
[QUOTE=leviaphan;2743775]да, я понимаю, что this-> - это указатель на данный класс.
Я пытался так
IDC_EDIT1.GetWindowText(str);
Пишет:
error C2228: left of '.GetWindowTextW' must have class/struct/union[/QUOTE]
Ні, по ідентифікатору звертаються не так.
Пробуй через змінну.
правою кнопкою по контролу -> AddVariable (variable name)
-
[QUOTE]Пробуй через змінну.
правою кнопкою по контролу -> AddVariable (variable name)[/QUOTE]
создал. а как к этой переменной потом обращаться?
-
CString str;
[B][COLOR="Red"]ТУТ_ВОНА[/COLOR][/B].GetWindowText(str);
this.SetWindowText(str);
MessageBox(str);
-
если, допустим, переменная называется to_enter, a ID Edit control - IDC_EDIT1, то как обратиться к переменной?:)
-
[COLOR="Red"]to_enter[/COLOR].GetWindowText(str);
this.SetWindowText(str);
MessageBox(str);
-
[QUOTE=YOKO;2743913][COLOR="Red"]to_enter[/COLOR].GetWindowText(str);
this.SetWindowText(str);
MessageBox(str);[/QUOTE]
Так уже пробовал. [B]error C2228: left of '.GetWindowTextW' must have class/struct/union[/B]
-
и, наверное, не this.SetWindowText(str), а (*this).SetWindowText(str) или this->SetWindowText(str)
-
[QUOTE=leviaphan;2743964]Так уже пробовал. [B]error C2228: left of '.GetWindowTextW' must have class/struct/union[/B][/QUOTE]
Значить, ти щось зробив не так.
Тобі треба створити змінну для скажімо "едіт бокса".
Змінна має бути "контрол"-типу, в полі variable name пишеш її назву.
(напр. to_enter)
Якщо ти все зробив правильно, у тебе не може бути жодних проблем.
[QUOTE]и, наверное, не this.SetWindowText(str), а (*this).SetWindowText(str) или this->SetWindowText(str)[/QUOTE]
Ти можеш this взагалі явно не указувати.
Тобто писати просто SetWindowText(str).
Проблема не тут.
-
[B]YOKO[/B], ОГРОМНОЕ вам спасибо! Дело в том, что я не подумавши установил тип переменное не CEdit (или что-то в этом роде), а char. Конечно, к char нельзя обращаться как к объекту!
-
нема за шо.
Взагалі то, змінну можна встановлювати будь-якого типу.
Просто звертатися вже потрібно буде "по іншому". :)
-
откомпилировал программу... на моём компьютере все работает, а на других - нет (приложение не может запуститься, поскольку оно некорректно настроено). Может, я какие-то галочки не поставил?
-
[QUOTE=leviaphan;2746874]откомпилировал программу... на моём компьютере все работает, а на других - нет (приложение не может запуститься, поскольку оно некорректно настроено). Может, я какие-то галочки не поставил?[/QUOTE]
Ти його відкомпілив з так званими "shared libraries".
Программа не може знайти відповідних бібліотек, тому і не запускається.
Щоб запускалась на всіх компах потрібно вибрати "static" лінковку.
Перед очима немає студії, точно не згадаю де цей пункт меню знаходиться.
Скоріше за все в "Project"...
Якщо дуже треба, то можеш скачати і встановити цей пакет бібліотек,
який ставиться з VS.
[url]http://www.microsoft.com/Downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=en[/url]
-
спасибо, нашёл. ещё такой вопрос:
допустим, есть строка (неважно, char, CString, string) типа "2.233423". Как можно строку любого из этих типов перевести в double или long double, ну или на худой конец в float?
-
Convert strings to double (atof), integer (atoi, _atoi64), or long (atol).
-
Пробежался.
Несколько дополнительных замечаний.
1) Кроме _T(".....") Юникод можно писать L".......".
2) В Edit за текстом лазить не красиво -
в при визуальном редактировании можно вместо контрола просто выбрать
CString и будет сгенерирована переменная для обмена.
Оно как-то сподручней.
-
[QUOTE=lexar;2749215]
2) В Edit за текстом лазить не красиво -
в при визуальном редактировании можно вместо контрола просто выбрать
CString и будет сгенерирована переменная для обмена.
Оно как-то сподручней.[/QUOTE]
Та все воно то вірно.
Тільки якщо людина вже такі прості речі питає, то краще
показати один з найнаглядніших варіантів.
Мене в свій час теж цікавив саме такий варіант. :)
Нехай вчиться по всякому.
Набереться трохи досвіду - буде використовувати те, що спідручніше
в конкретному разі.
-
[quote=lexar;2749215]
1) Кроме _T(".....") Юникод можно писать L".......".
[/quote]
Да, но эти два способа не эквивалентны.
_T - Это макрос, который проверяет определен ли символ UNICODE, и в зависимости от результата использует ASCII или UNICODE. В случае с использованием L".......", всегда определяется юникодовская строка.
-
Ох-ох, когда то я тоже так начинал, MFC и VC - ни чего не понятно было, хотя сам "с" я знал. Умный человек порекомендовал мне хорошую книгу по чистому Win32 Api, вот когда я ее прочел, только потом приступил к повторному изучению MFC классов, вот тогда у меня в голове стало все по местам.
-
Спасибо всем за советы! Недавно я нашёл [URL="http://www.infanata.org/2007/06/08/multimedijjnyjj_obuchajushhijj_kurs_teachpro_visual_c.html"]видео-курс по visual c++[/URL]. Правда, чересчур подробный, объясняется как для полных чайников (вплоть до того, как перемещать и закрывать окна). Но это всё же лучше, чем ничего. Если сюда зайдёт такой же dummy, как я, может пригодится:)
-
Кстати, кто-то знает в чем разница между макросами _T и TEXT ?
-
[QUOTE=mutex;2768021]Кстати, кто-то знает в чем разница между макросами _T и TEXT ?[/QUOTE]
Да вобщем-то ни чем. В разных заг. файлах только определенны а делают одно и тоже.
-
[quote=evilduck;2759481]Ох-ох, когда то я тоже так начинал, MFC и VC - ни чего не понятно было, хотя сам "с" я знал. Умный человек порекомендовал мне хорошую книгу по чистому Win32 Api, вот когда я ее прочел, только потом приступил к повторному изучению MFC классов, вот тогда у меня в голове стало все по местам.[/quote]
А что за книга, по которой Вы апи изучали, Рихтер?
-
[QUOTE=Newton;2775306]А что за книга, по которой Вы апи изучали, Рихтер?[/QUOTE]
"Programming Windows 95" by Charles Petzold