Savant |
21-03-2005 20:16 308821 |
*Решено* Win32API | Базовый диалог открытия файла сам не открывается
Я пас... где ошибка???
CommDlgExtendedError() возвращает по-видимому CDERR_INITIALIZATION
Цитата:
Цитата Windows SDK
The common dialog box function failed during initialization. This error often occurs when sufficient memory is not available.
|
с памятью вроде всё в порядке...
Код:
new char[256];
OPENFILENAME ofn;
memset(&ofn, 0,
Код:
sizeof (OPENFILENAME));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.hwndOwner = hDlg; // это хэндл диалога, из которого запускаю
ofn.lpstrFilter = "Все файлы\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFile = buf;
ofn.nMaxFile = 256;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_NOREADONLYRETURN;
if (!GetOpenFileName(&ofn)) {
sprintf(buf, "%d\0", CommDlgExtendedError());
MessageBox(0, buf, "", 0);
}
delete buf;
|
Savant |
22-03-2005 11:28 308967 |
С утречка вроде получше соображаться стало :). В общем слегка изменив предыдущий код, имеем:
Код:
char szFilter[] = TEXT("Все файлы (*.*)\0*.*\0\0");
char szBuf[MAX_PATH];
OPENFILENAME ofn;
memset(&ofn, 0, sizeof (OPENFILENAME));
memset(&szBuf, 0, sizeof (szBuf));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.hwndOwner = hWndMain; // это хэндл диалога, из которого запускаю, возвращенный CreateDialog()
ofn.lpstrFilter = szFilter;
ofn.nFilterIndex = 1L;
ofn.lpstrFile = szBuf;
ofn.nMaxFile = sizeof (szBuf);
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_NOREADONLYRETURN;
if (!GetOpenFileName(&ofn)) {
sprintf(szBuf, "%d\0", CommDlgExtendedError());
}
MessageBox(0, szBuf, "", 0);
Эта бяка уже работает превосходно :). Но мне всё же не ясно, что изменилось фактически...
|
Отличие в том, что не инициализируешь имя файла (в буфере лежит всякая гадость, напр."~!\?/'" а не "\0"). Попробуй в примере №1 *buf = 0; Если поможет - напиши.
|
Savant |
22-04-2005 15:19 318199 |
pva
Цитата:
Попробуй в примере №1 *buf = 0; Если поможет - напиши.
|
Само собой поможет :). Кстати в том же примере №1 есть и ошибка неприметная: вместо delete buf надо delete[] buf. Удалить-то нужно весь массив...
|
Время: 13:39.
© OSzone.net 2001-