-
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]