Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Два вопроса по VC++.NET2003


Автор: Maksim 5.4.2004, 00:25
Всем привет!
Подскажите плиз если не сложно...

1. При создании проекта в окне Application Type есть поле Resource language. В том пакете который я приобрёл (на 8 дисках, Enterprise Architect) в этом поле есть все языки кроме русского. Можно как-то где-нибудь скачать и подгрузить русский файл? Или это вообще нереально?
Если попробовать, например, пункты меню сделать на русском, то вместо слов абракадабра... Как исправить?

2. Как передать значение из DDX переменной соответствующему объекту и наоборот? Прочитал что это делается с помощью функции UpdateData, но она не передаёт ничего. Более того, скачал файлик с примером, там эта функция присутствует и работает как надо, но перед загрузкой этого примера выдаётся сообщение что он был сделан в другой версии студии и требуется его конвертировать. После конвертирования всё там работает, но внутрь UpdateData по F11 не залезает, чем она отличается от моей непонятно...

Заранее спасибо,
с уважением, Максим.

Автор: chipset 5.4.2004, 02:57
если ты знаешь как сделать Label мембером формы, тогда перед тем как осущствлять передачу делай UpdateData(FALSE);
а в конце после всего UpdateData(TRUE);
или наооборот... точно не помню...
пытаюсь понять куда майкрософт засунула ClassWizard и главное ЗАЧЕМ? adv/63.gif

Автор: Maksim 5.4.2004, 10:15
Я наверно что-то не понимаю, но:
по Тому Арчеру UpdateData нужно делать не до и после передачи, а она и есть передача. С параметром TRUE значение из объекта (допустим edit control) передаётся в его DDX переменную, c FALSE наоборот - значение переменной передаётся объекту... Никаких дополнительных передач не треба...

Вот, например, почему так получается:
если войти по F11 в UpdateData (мою), затем войти в DoDataExchange, то там видим следующий код:

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

тогда как Арчер в своей DoDataExchange видит вот это:

void CERR_diaDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDIT1, m_strVariable);
CDialog::DoDataExchange(pDX);
}

Этот код генерится автоматически в обоих случаях, так почему в моей версии студии не происходит обращение к DDX_Text? А ведь именно поэтому не работает - если её ручками добить, то всё ОК, но хотелось бы знать причину...


Упс! Вот, нашёл ответ, по-моему:

This problem can be chalked up to the joys of writing a book while working on a beta product smile.gif As a result when the UI changed in Visual Studio, that particular demo became incorrect. Here's how to solve the problem. Instead of checking or unchecking the "Control variable" check box, you need to select the appropriate entry in the Category combo box. Long story, short. Microsoft using ambiguous terms to represent two different things. Checking the "Control variable" checkbox is how you tell Visual Studio that you're either creating a simple member variable for a class (non-DDX) or you're creating a DDX variable that will be associated with a control on the dialog. The Category combo box is where you state whether you're creating a value DDX member variable or a control DDX member variable. In this case, you need to keep the "Control variable" checked and select Value from the Category combo box. You'll then see a default type of CString. Simply specify the variable name (m_strMessage for the book's demo), click the Finish button and the DDX_Text function call will be correctly inserted into the dialog's DoDataExchange member function.

Я не слишком силён в ангицком, но суть понятна.

Автор: Maksim 5.4.2004, 10:28
Всё, со вторым вопросом более или менее разобрался.
Остаётся первый smile.gif

Автор: Maksim 5.4.2004, 17:26
А-у-у!
Что, у всех русский resource language присутствует изначально? Меню на русском никто не делал никогда?

Автор: AntonSaburov 6.4.2004, 11:26
Цитата
При создании проекта в окне Application Type есть поле Resource language.

Я просто меню всегда создавал ручками, поэтому не сталкивался. А где такое окно искать надо ?

Автор: Maksim 6.4.2004, 21:20
Имеется ввиду окно создания проекта - MFC Application Wizard, вкладка Application Type, там раскрывающийся список Resource language. Хотя мож оно к меню и не относится, не знаю, но русского там нет и меню не получается на русском. Мож совпадение...

Вот скриншот:

http:\\oldslav.chat.ru\pro\ex.gif

Автор: Guest 16.4.2004, 00:07
Цитата
1. При создании проекта в окне Application Type есть поле Resource language. В том пакете который я приобрёл (на 8 дисках, Enterprise Architect) в этом поле есть все языки кроме русского. Можно как-то где-нибудь скачать и подгрузить русский файл? Или это вообще нереально?
Если попробовать, например, пункты меню сделать на русском, то вместо слов абракадабра... Как исправить?


Есть в MSDN такая информация:

When you install Visual Studio, the setup application detects the locale listed in your system and installs the appropriate language template or templates for that locale. For example, for Western European locales, setup installs English, French, Italian, Spanish, and German. These languages appear in the Resource language list on the Application Type page of the MFC Application Wizard.

Not all templates are installed on all systems, because the templates are ANSI encoding based, and not all resources can be edited on all systems. For example, by default, you cannot edit Japanese resources on a French system.

If you are using Windows 2000 or later and you want to create an MFC application in another language, then you must copy the template directory for the appropriate language from the Visual Studio CD to your system.

Note To edit the created project, you must set your system locale to the appropriate locale for the selected language.
The templates are each assigned a folder in the \Microsoft Visual Studio .NET 2003\Vc7\VCWizards\mfcappwiz\templates\ directory, as listed in the following table . To access the desired language template, copy the appropriate folder to the \mfcappwiz\templates\ directory on your computer. Once you have copied the folder, the language will appear in the Resource language list on the Application Type page of the MFC Application Wizard.

Пожалуйста, посмотрите у себя на инсталляционном CD соответствующую поддиректорию, согласно указанному выше. Может быть, там есть и русские ресурсы. Я сам не проверял, но надеюсь на наличие. Если у Вас нет этого CD или, все же, нет там русских ресурсов, то я могу посмотреть тогда у себя и прислать Вам - куда укажете. Но, может быть, я не совсем правильно понимаю Ваш вопрос и Ваша проблема заключается не в самом русском ресурсе, то есть его содержании, а в отображении его на экране - например, в меню. Тогда перейдите на UNICODE и проблемы не будет.


Цитата
2. Как передать значение из DDX переменной соответствующему объекту и наоборот? Прочитал что это делается с помощью функции UpdateData, но она не передаёт ничего. Более того, скачал файлик с примером, там эта функция присутствует и работает как надо, но перед загрузкой этого примера выдаётся сообщение что он был сделан в другой версии студии и требуется его конвертировать. После конвертирования всё там работает, но внутрь UpdateData по F11 не залезает, чем она отличается от моей непонятно...


UpdateData работает как надо, и именно так как надо Вам. Я это сейчас проверил и на V.Studio 6.0, и на V.Studio .NET 2003. Надо соответствено указывать для данного метода значение аргумента: TRUE - значения передаются от диалоговых объектов переменным, а при FALSE - наоборот. Если переменные введены Вами средствами визуальной разработки или же вручную и правильно (то есть все сделано для DDX), то UpdateData работает.

Автор: Maksim 10.5.2004, 18:39
Да, точно, у меня на установочном диске нет русского ресурса!
Буду очень благодарен если получу его smile.gif
Пожалуйста, пришлите его, кто-нибудь!

valeev@gnext.ru

Заранее спасибо.

Автор: [ t.i.m. ] 24.6.2004, 12:39
Нет необходимости искать русскоязычную dll...

Просто забей на абракадабру, поставь язык при мастере оздания на Английский, а когда визард произведет все построения и перед тобой будет редактор с диалогом.
Зайди в Resource View, выбери ресурс с диалогом (типа IDD_SOMEMY_DIALOG), а потом переключись на Properties View, там в пункте Language выберешь Русский.
Не удивляйся если лейбл с написанными русскими буквами останется абракадаброй... Просто тектс в поле Caption заново надо набрать...
Попробуй, если не поможет пиши еще...

[ t.i.m. ]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)