Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблемы с загрузкой файла


Автор: Proletariy 24.9.2009, 10:24
Добрый всем день.

Собственно вопрос в чем. Создал SDI программу. Создал для нее инсталяцию. 
В реестр прописал строки, для того, чтобы Винда определяла принадлежность файлов создаваемых моей программой.
HKEY_CLASSES_ROOT
1)
.xxx -> XXX-File
2)
XXX-File\DefaultIcon\-> Путь\myicon.ico
XXX-File\shell\Open\command\ -> Путь\myprogramm.exe "%1"

После инсталяции Винда видит принадлежность файлов с расширением *.xxx. 

Собственно вопрос в чем. При открытии файлов через программу - вопросов нет- все четко открывается.

Но если пытаюсь открыть файл без запущенной программы (например двойным кликом мыши по файлу с расширением *.xxx), просто запускается моя программа не принимая значения сохраненные в файле и имя файла. Т.е. запускается просто программа.

Что делать, как быть, посоветуйте.  smile 

Автор: Andrey44 24.9.2009, 11:41
Копай в сторону CWinApp::ParseCommandLine

Автор: Proletariy 24.9.2009, 11:54
Andrey44  Thanks

Автор: Proletariy 24.9.2009, 14:48
Andrey44  подскажи пжл.

Не могу понять как получить информацию, открываем ли мы файл, либо просто стартуем приложение:

Код

BOOL CMyApp::InitInstance()
....
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen)
{
     OpenDocumentFile(m_lpCmdLine);
    //или
    cmdInfo.m_strFileName = CCommandLineInfo::m_strFileName;
}


if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen)
не срабатывает на запуск программы через открытие файла????

Автор: Andrey44 25.9.2009, 09:49
Отнаследоваться от класса CCommandLineInfo и перекрыть метод ParseParam():

    virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast );

    The framework calls this function to parse/interpret individual parameters from the command line. CWinApp::ParseCommandLine calls ParseParam once for each parameter or flag on the command line, passing the argument to lpszParam. If the first character of the parameter is a ‘-’ or a ‘/’, then it is removed and bFlag is set to TRUE. When parsing the final parameter, bLast is set to TRUE.


После этого воспользоваться в InitInstance() методом CWinApp::ParseCommandLine(), куда передать ссылку на созданный экземпляр потомка CCommandLineInfo.

Кроме GetCommandLine() тот же результат можно получить, взяв AfxGetApp()->m_lpCmdLine или theApp->m_lpCmdLine
А еще хорошая функция CommandLineToArgvW()

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