Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с дилогами, Диалоги, radiobutton 
V
    Опции темы
ToshaR
Дата 9.12.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Вообщем у меня диалог, а в нем я выбираю какой язык в программе использую. И вот почему то когда я его меня в диалоге, то меняется все кроме меню, которое я загружаю из dll. А если менять язык не в диалоге, а в меню, то все работает.

Вот сообщение о том что выбран Английский.
Код

case ID_ENG:
    if(hr) FreeLibrary(hr);
        if(he) FreeLibrary(he);
        if(menu) DestroyMenu(menu);
        if(NULL==(he=LoadLibraryEx(/*(LPCSTR)*/TEXT("Language\\EngMenu.dll"),0,LOAD_LIBRARY_AS_DATAFILE))){
            errorReport();
            return 0;
        }
        menu=LoadMenu(he,MAKEINTRESOURCE(IDC_TTF));
        SetMenu(hWnd, menu);
        EnableMenuItem(GetMenu(hWnd), IDM_ABOUT, MF_ENABLED);
        CheckMenuItem(GetMenu(hWnd), ID_ENG, MF_CHECKED);
        CheckMenuItem(GetMenu(hWnd), ID_RUS, MF_UNCHECKED);
        eng=true;
        rus=false;



А вот в диалоге я проверяю, где отмечено,и тогда посылаю нужное сообщение:
Код

if(LOWORD(wParam)==IDC_APPLY)
        {
            if(SendDlgItemMessage(hDlg,IDC_RADIO1,BM_GETSTATE,0,0)){
                SendMessage(WndParent,ID_RUS,0,0); rus=true; eng=false;}
            if(SendDlgItemMessage(hDlg,IDC_RADIO3,BM_GETSTATE,0,0)){
                SendMessage(WndParent,ID_ENG,0,0); rus=false; eng=true;}
            return (INT_PTR)TRUE;
        }


PM MAIL   Вверх
J0ker
Дата 9.12.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



проверьте, что возвращает DestroyMenu и SetMenu - возможно в случае если меню активно эти операции не проходят
если это так возможно надо менять меню в обработке юзер мессаджа, а в обработке ID_ENG просто посылать этот юзер мессадж самому себе


--------------------
user posted image
PM MAIL   Вверх
GremlinProg
Дата 9.12.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



ToshaR, зачем такие расходы?
языковые настройки меню просто реализуются через специально предназначенные для этого API:
Цитата

HRSRC FindResourceEx(          HMODULE hModule,
    LPCTSTR lpType,
    LPCTSTR lpName,
    WORD wLanguage
);

совместно с LoadMenuIndirect

порядок загрузки:
Код

HRSRC hrsrc            = ::FindResourceEx(hInstance,RT_MENU,MAKEINTRESOURCE(MENU_ID),language);
DWORD size            = ::SizeofResource(hInstance,hrsrc);
HGLOBAL hmem        = ::LoadResource(hInstance,hrsrc);
MENUTEMPLATE*lpmem    = (MENUTEMPLATE*)::LockResource(hmem);
::LoadMenuIndirect(lpmem);

language - язык, который можно задать в файле ресурсов, например так:
Код

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)

все ресурсы, объявленные после определения LANGUAGE, принадлежат отдельной ветви
если в одном файле *.rc завести несколько дублей ресурсов, но с на разных языках, то FindResourceEx будет автоматически их учитывать, вот пример *.rc с меню:
Код

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)

IDC_MAINMENU    MENU
BEGIN
    POPUP    "&Файл"
    BEGIN
        MENUITEM "Вы&ход",                        IDM_EXIT
    END
END

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
#pragma code_page(1252)

IDC_MAINMENU    MENU
BEGIN
    POPUP    "&File"
    BEGIN
        MENUITEM "E&xit",                        IDM_EXIT
    END
END

такие языковые настройки можно слоить сколь угодно много, причем как при сборке, так и без перекомпиляции:
необходимый инструментарий для добавления/удаления языка, в таком случае, требует только работы с секцией ресурсов конечной программы, которая доступна через Resources API:
BeginUpdateResource
UpdateResource
EndUpdateResource
сделай, к примеру отдельную программку, которая будет нести в своих ресурсах японское меню,
а в момент запуска просто будет зашивать в ресурсы твоей программы свои японские ресурсы, через Resources API
получится языковой аплоадер, тогда и тучу языковых библиотек не понадобится таскать за собой


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ToshaR
Дата 10.12.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



GremlinProg, спасибо! Разобрался)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.