Visual C++. Описание стандартных классов
Страница 28.


 
ProcessShellCommand
BOOL ProcessShellCommand(CCommandLineInfo& rCmdInfo);
Возвращаемое значение
Ненулевое, если переданные данной функции команды были выполнены успешно, в противном случае функция InitInstance возвращает ноль.
Аргументы
"sectiontableheader"rCmdInfo - ссылка на объект класса CCommandLineInfo.
Описание
Данная функция вызывается в функции InitInstance для обработки параметров командной строки, передаваемых ей в объекте структуры CCommandLineInfo. При создании с использованием мастера AppWizard нового приложения, использующего библиотеку MFC, мастер AppWizard создает в функции InitInstance локальный объект класса CCommandLineInfo, а затем вызывает функции ProcessShellCommand и ParseCommandLine. Обработка параметров командной строки производится следующим образом:

1.После своего создания в функции InitInstance объект класса CCommandLineInfo передается в качестве параметра функции ParseCommandLine.
2.Функция ParseCommandLine последовательно вызывает функцию CCommandLineInfo::ParseParam для каждого параметра командной строки.
3.Функция ParseParam присваивает значения переменным в объекте класса CCommandLineInfo, который затем передается в качестве аргумента функции ProcessShellCommand.
4.Функция ProcessShellCommand производит действия, указанные в параметрах командной строки.
Переменная CCommandLineInfo::m_nShellCommand представляет собой переменную перечислимого типа, определенную в классе CCommandLineInfo следующим образом:
enum{
  FileNew,
  FileOpen,
  FilePrint,
  FilePrintTo,
  FileDDE,
};
SetRegistryKey
void SetRegistryKey(LPCTSTR lpszRegistryKey);
void SetRegistryKey(UINT nIDRegistryKey);
Аргументы
"sectiontableheader"lpszRegistryKey - указатель на строку, содержащую имя ключа.
"sectiontableheader"nIDRegistryKey - идентификатор или индекс ключа в реестре.
Описание
Вызов данной функции позволяет сохранять параметры начальной установки вашего приложения в системном реестре, а не в файлах с расширением ini, как это имело место в старых версиях Windows. В ней устанавливается ключ m_pszRegistryKey, который может затем использоваться в функциях, членах класса CWinApp, таких, как GetProfileInt, GetProfileString, WriteProfileInt и WriteProfileString. Вызов данной функции приводит к сохранению в системном регистре списка недавно использованных файлов. В качестве ключа регистрации обычно выбирается название компании. В этом случае адрес конкретной переменной в системном реестре выглядит следующим образом HKEY_CURRENT_USER\Software\<название компании>\<имя приложения>\<имя секции>\<идентификатор переменной>.
WinHelp
virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
Аргументы
"sectiontableheader"dwData - определяет дополнительную информацию. Трактовка данного аргумента зависит от значения аргумента nCmd.
"sectiontableheader"nCmd - определяет тип запрашиваемой справочной информации. Список возможных значений данного аргумента совпадает со списком возможных значений аргумента dwData глобальной функции WinHelp.
Описание
Данная функция вызывается для запуска приложения WinHelp. Приложение WinHelp автоматически закрывается при закрытии вызвавшего его приложения.
WriteProfileString
BOOL WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue);
Возвращаемое значение
Ненулевое, если операция прошла успешно, и ноль в противном случае.
Аргументы
"sectiontableheader"lpszSection - указатель на символьную строку, заканчивающуюся нулем, определяющее секцию, содержащую данную строку. Если данная секция не существует, то она создается. Имя секции не зависит от регистра используемых в ней символов, и она может представлять собой любую комбинацию заглавных и прописных букв.
"sectiontableheader"lpszEntry - указатель на символьную строку, заканчивающуюся нулем, определяющую идентификатор строки в записи. Если данный идентификатор в секции не существует, то он создается.
"sectiontableheader"lpszValue - указатель на строку, которую необходимо сохранить. Если этот параметр имеет значение NULL, то идентификатор, указанный в аргументе lpszEntry, удаляется из записи.
Описание
Данная функция вызывается для сохранения указанной строки в указанной секции реестра приложения или в файле с расширением .ini.
CWinThread
Объекты класса CWinThread представляют собой потоки, исполняющиеся в приложении. Основной поток приложения обычно представлен объектом класса, производного от класса CWinApp, который, в свою очередь, является производным от класса CWinThread. Дополнительные объекты класса CWinThread позволяют создавать несколько потоков в одном приложении.
Существуют две основные разновидности потоков: рабочие потоки и интерфейсные потоки. Рабочие потоки не содержат цикла обработки сообщений. Примером такого потока может служить выполнение фоновых вычислений в приложении, использующем рабочие листы. Интерфейсные потоки содержат цикл обработки сообщений и могут обрабатывать сообщения, поступающие от системы. Класс CWinApp и производные от него классы являются примером интерфейсных потоков. Другие классы интерфейсных потоков могут производиться непосредственно от класса CWinThread.
Объекты класса CWinThread обычно уничтожаются при завершении потоком своей работы. Для того чтобы эти объекты сохранялись после завершения потоком своей работы необходимо присвоить переменной m_bAutoDelete значения FALSE.
Вся информация, необходимая для взаимодействия потока с приложением содержится в соответствующем объекте класса CWinThread. Поэтому любой поток, использующий библиотеку MFC должен быть производным от данного класса. Например, поток, созданный функцией _beginthreadex, не может использоваться в приложениях, использующих библиотеку MFC.
Поток создается функцией AfxBeginThread. Эта функция имеет две версии, первая из которых создает рабочий поток, а вторая - интерфейсный поток. При создании рабочего потока первым аргументом функции AfxBeginThread является указатель на исполняющую функцию данного потока. При создании интерфейсного потока первым аргументом функции AfxBeginThread является указатель на объект структуры CRuntimeClass пользовательского класса, производного от класса CWinThread. В обеих версиях функций могут быть указаны дополнительные аргументы, определяющие приоритет потока, размер его стека и атрибуты безопасности. Функция AfxBeginThread возвращает указатель на созданный ею объект класса, производного от класса CWinThread.
Вместо вызова функции AfxBeginThread объект класса, производного от класса CWinThread, может быть создан своим конструктором, после чего для него должна быть вызвана функция CreateThread. Этот двухэтапный метод может использоваться для последовательного создания нескольких потоков с использованием одного объекта класса CWinThread.
Описание данного класса содержится в файле заголовка afxwin.h.
CreateThread
BOOL CreateThread(DWORD dwCreateFlags = 0, UINT nStackSize = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
Возвращаемое значение
Ненулевое, если создание потока завершилось успешно, и нулевое в противном случае.
Аргументы
"sectiontableheader"dwCreateFlags - определяет дополнительный флаг, устанавливающий режим создания потока. Этот флаг может иметь два значения:
"sectiontableheader"CREATE_SUSPENDED - при создании потока его счетчик остановки устанавливается в единицу. Чтобы запустить поток, необходимо вызвать функцию ResumeThread;
"sectiontableheader"0 - поток запускается на исполнение немедленно после своего создания.
"sectiontableheader"nStackSize - определяет размер стека нового потока в байтах. Если эта величина равно нулю, то у создаваемого потока создается стек того же размера, что и у вызывающего потока.
"sectiontableheader"lpSecurityAttrs - указатель на объект структуры SECURITY_ATTRIBUTES, определяющий атрибуты безопасности данного потока. Если эта величина равна нулю, то создаваемый поток имеет те же атрибуты безопасности, что и вызывающий поток.
Описание
Создает поток в адресном пространстве вызывающего процесса. Чтобы создать объект класса потока и одновременно запустить его, используйте функцию AfxBeginThread. Функция CreateThread обычно применяется в том случае, когда один и тот же объект класса потока используется для последовательного создания нескольких потоков.
 
« Предыдущая статья   Следующая статья »