Russian Qt Forum
Ноябрь 23, 2024, 21:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Диалог открытия файла  (Прочитано 8944 раз)
ixtorio
Гость
« : Апрель 05, 2011, 13:01 »

почему данный код не срабатывает как надо?
Код
C++ (Qt)
#include <windows.h>
 
 
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle
 
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
 
// Display the Open dialog box.
 
if (GetOpenFileName(&ofn)==TRUE)
   hf = CreateFile(ofn.lpstrFile,
                   GENERIC_READ,
                   0,
                   (LPSECURITY_ATTRIBUTES) NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   (HANDLE) NULL);
 
   return 0;
}
 
сорец взят с мсдн но мой переписанный тоже не работал ,а на асме это всё работает безупречно
Записан
Denjs
Гость
« Ответ #1 : Апрель 05, 2011, 13:08 »

мсдн ...  фу-фу-фу...

асм? ассемблер?
в Qt есть свои работающие диалоги открытия файла. их используйте.


а по вашему коду - хоть опишиет "как именно оно не работает?!"..ошибки..поведение...
Записан
ixtorio
Гость
« Ответ #2 : Апрель 05, 2011, 13:12 »

вопрос касается не кутэ а с++ и вин апи,поэтому тема в этом разделе...ошибок нет просто программа как запустилась так и выключилась без каких либо ошибок
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 05, 2011, 13:13 »

Ну так прогони ее через gdb и посмотри где падает.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Nimbus
Гость
« Ответ #4 : Апрель 05, 2011, 13:24 »

Код
C++ (Qt)
HWND hwnd;              // owner window
ofn.hwndOwner = hwnd;
 
Не проинициализировал же
Записан
ixtorio
Гость
« Ответ #5 : Апрель 05, 2011, 17:23 »

она не падает она просто заканчивает и выходит возвращая 0 функцией GetOpenFileName..и окна у проги нет ,и ресурсов нет ,ничего нет...это весь исходник...задача програмы дать выбрать файл и закрыться после этого
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Апрель 05, 2011, 18:13 »

Вполне возможно, что OPENFILENAME неверно настроил.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ixtorio
Гость
« Ответ #7 : Апрель 05, 2011, 19:03 »

яже написал что пример этот приведен из мсдн майкрософтовского
если не веришь , сам посмотри http://msdn.microsoft.com/en-us/library/ms646829(v=VS.85).aspx#open_file

и у меня он неработает,вот этот пример компилится и работает в ассемблере
Код
ASM
  ofn OPENFILENAME <>
  FilterString db "Executable Files (*.exe, *.dll)",0,"*.exe;*.dll",0,"All Files",0,"*.*",0,0
  buffer db 512 dup(?)
 
  mov ofn.lStructSize,SIZEOF ofn
  mov ofn.lpstrFilter, OFFSET FilterString
  mov ofn.lpstrFile, OFFSET buffer
  mov ofn.nMaxFile,512
  mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
  invoke GetOpenFileName, ADDR ofn
 

а переведя его в с++ он тоже не работает,тут не сложно перевести как видишь ....
« Последнее редактирование: Апрель 05, 2011, 19:32 от ixtorio » Записан
Denjs
Гость
« Ответ #8 : Апрель 05, 2011, 20:33 »

блин... вы на Qt-шном форуме спрашиваете... вам действительно не хватает Qt-шного диалога открытия окна?
кстати на "винграде" спрашивали?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Апрель 05, 2011, 20:47 »

нагуглилось
Может поможет. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ixtorio
Гость
« Ответ #10 : Апрель 06, 2011, 00:53 »

спасибо тебе большое ты дал правильное направление поиска, оказалось что в строке 11 нужно в качестве параметра функции sizeof() указать тип структуры,тоесть OPENFILENAME, и вот теперь всё работает...
вот рабочий исходник...

Код
C++ (Qt)
#include <windows.h>
 
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle
 
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
 
if (GetOpenFileName(&ofn)==TRUE)
   hf = CreateFile(ofn.lpstrFile,GENERIC_READ,0,(LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
return 0;
}
 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Апрель 06, 2011, 07:34 »

Винапи такое винапи. Улыбающийся
ixtorio, я, конечно, занудствую, но решение нагуглилось меньше чем за минуту - мог бы и сам. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ixtorio
Гость
« Ответ #12 : Апрель 06, 2011, 19:36 »

к сожалению не всем везёт =( я тоже гуглил по этому поводу
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Апрель 06, 2011, 19:43 »

шестая ссылка сверху Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Sahab
Гость
« Ответ #14 : Апрель 06, 2011, 22:35 »

блин... вы на Qt-шном форуме спрашиваете... вам действительно не хватает Qt-шного диалога открытия окна?
кстати на "винграде" спрашивали?
Больше всего раздражает подобное... можно подумать форум только для кутешнигов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.318 секунд. Запросов: 23.