ВОПРОС-ОТВЕТ
Q. Как создать окно ввода текста переключаясь в которое устанавливался бы заданный язык. Например, необходим ввод только русских слов в строке, по которой ищется перевод на английский, а язык по умолчанию в виндовс английский. Хотелесь бы при запуске программы, когда пользователь ткнет мышкой в поле ввода, чтобы он не переключал язык по умолчаню на русский.
Alexander Shinkevich
A 1Для переключения раскладок необходимо вызвать функцию LoadKeyboardLayout.
Ниже приводится пример ее использования:
1) Добавить в проект с помощью Class Wizard'а новый класс CMyEdit на основе CEdit.
2) Добавить в класс переменную, хранящую предыдущую установленную раскладку клавиатуры:
TCHAR m_PreviousLayout[KL_NAMELENGTH];
3) Добавить обработчики WM_SETFOCUS и WM_KILLFOCUS:
void CMyEdit::OnSetFocus(CWnd* pOldWnd) {
CEdit::OnSetFocus(pOldWnd);
// запоминаем предыдущую раскладку клавиатуры
::GetKeyboardLayoutName(m_PreviousLayout);
// устанавливаем новую раскладку для языка "Русский"
::LoadKeyboardLayout(_T("00000419"), KLF_ACTIVATE);
}
void CMyEdit::OnKillFocus(CWnd* pNewWnd) {
CEdit::OnKillFocus(pNewWnd);
// восстанавливаем предыдущую раскладку клавиатуры
::LoadKeyboardLayout(m_PreviousLayout, KLF_ACTIVATE);
}
4) Использовать CMyEdit вместо CEdit (на примере диалога):
class CMyDlg : public CDialog {
// ...
CMyEdit m_Edit;
// ...
};
void CMyDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestKeyboardDlg)
DDX_Control( pDX, IDC_EDIT, m_Edit );
//}}AFX_DATA_MAP
}
Алексей Гончаров
A 2[…] Также можно активизировать т.н. keyboard layout (раскладку клавиатуры) с помощью функции ActivateKeyboardLayout, активизирующей раскладку, загруженную предварительно с помощью указанной выше функции LoadKeyboardLayout. Хотя LoadKeyboardLayout сама может активизировать раскладку (при использовании флага KLF_ACTIVATE), но при частой смене языка оптимальнее использовать ActivateKeyboardLayout. Т.е. в начале загрузить раскладку с помощью LoadKeyboardLayout, а многократно переключать язык ввода функцией ActivateKeyboardLayout.
Igor Sukharev
В ПОИСКАХ ИСТИНЫ
Q. Можно ли из моей программы управлять окном которое создано другим приложением (закрывать, сворачивать, нажимать в нем кнопки и т.д.), если да то как?
Alhim
А на сегодня это все. До встречи через неделю!
Алекс Jenter jenter@mail.ru Красноярск, 2001.
Программирование на Visual C++
Выпуск №36 от 11 марта 2001 г.
Здравствуйте!
Ну вот, готова моя первая статья из серии, посвященной межпроцессному обмену данными. Эта статья является обзорной, ее цель – познакомить вас со всем многообразием механизмов Windows для обмена данными между процессами. В последующих статьях я остановлюсь на основных методах поподробнее. Хотя, к сожалению не могу обещать что эти статьи появятся скоро. Вы, однако, можете повлиять на мой выбор тем для подробного рассмотрения, если сообщите мне заранее, какая именно из них вас особенно интересует.
СТАТЬЯ
IPC: основы межпроцессного взаимодействия
Обзор технологий
Введение
Любая операционная система была бы весьма ущербна, если бы замыкала выполняющееся приложение в собственном темном мирке без окон и дверей, без какой-либо возможности сообщить другим программам какую-либо информацию. Если посмотреть внимательно, можно заметить, что далеко не все приложения являются самодостаточными. Очень многим, если не большей части, требуется информация от других приложений, либо они должны эту информацию сообщать. Именно поэтому в операционную систему встраивается множество механизмов, которые обеспечивают т.н. Interproccess Communication (IPC) – то есть межпроцессное взаимодействие .
В историческом плане сначала появилась необходимость в общении процессов, выполняющихся на одном компьютере. В дальнейшем с бурным развитием сетевых технологий все острее стала чувствоваться потребность в средствах для взаимодействия процессов, выполняющихся на разных компьютерах в сети. Особенно трудна такая задача, если это компьютеры на базе разных платформ и/или с разными операционными системами.
Рассмотрим подробнее несколько ключевых примеров, демонстрирующих важность IPC. Вам, возможно это покажется неправдоподобным, но зачатки IPC существовали еще в MS-DOS – и это несмотря на то, что MS-DOS при всем желании трудно назвать многозадачной средой. В самом деле, когда вы в командной строке вводили подобную инструкцию:
C:\>DIR|MORE
происходило следующее: выполнялась команда DIR и ее вывод записывался во временный текстовый файл. После этого содержимое файла подавалось на вход команды MORE. В результате вы получали листинг каталогов, который в случае большого количества каталогов не уезжал мгновенно за экран, а мог скроллироваться с помощью клавиши Enter. Конечно же это очень примитивный IPC, но его наличие показывает, что уже тогда такой механизм был востребован и в какой-то мере реализован.
Читать дальше