ПМСО
Если поиск завершился успешно, функция FindFirstFile возвращает идентификатор поиска, который будет затем использован в цикле при вызове функции FindNextFile. При ошибке возвращается значение INVALID_HANDLE_VALUE.
DwFileAttributes
Указывает атрибуты найденного файла. Этот элемент может быть комбинацией следующих значений:
| Атрибут | Описание |
| FILE_ATTRIBUTE_ARCHIVE | Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления. |
| FILE_ATTRIBUTE_COMPRESSED | Файл или каталог сжат. Для файла это означает, что все данные его сжаты, для каталога - что компрессия по умолчанию применяется ко всем его файлам и подкаталогам. |
| FILE_ATTRIBUTE_DIRECTORY | Это каталог. |
| FILE_ATTRIBUTE_ENCRYPTED | Файл или каталог зашифрован. Для файла, это означает, что все данные в файле зашифрованы. Для директории это означает, что шифрование является умолчанием для вновь созданных файлов и подкаталогов. |
| FILE_ATTRIBUTE_HIDDEN | Файл скрыт. Такой файл не включается в обычный листинг каталога. |
| FILE_ATTRIBUTE_NORMAL | У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов. |
| FILE_ATTRIBUTE_OFFLINE | Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения. |
| FILE_ATTRIBUTE_READONLY | Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его. |
| FILE_ATTRIBUTE_REPARSE_POINT | Каталог является точкой повторной обработки. |
| FILE_ATTRIBUTE_SPARSE_FILE | Файл является т.н. Разрежённый файл. |
| FILE_ATTRIBUTE_SYSTEM | Этот файл - часть операционной системы. |
| FILE_ATTRIBUTE_TEMPORARY | Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён. |
| FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | Этот файл или каталог не будут индексироваться службой индексирования. |
| FILE_ATTRIBUTE_VIRTUAL | Этот файл - виртуальный файл. |
Поля cFileName и cAlternateFileName структуры WIN32_FIND_DATA содержат, соответственно, длинное имя файла и короткое, альтернативное имя файла “в формате 8.3”.
2) После вызова функции FindFirstFile необходимо выполнять в цикле вызов функции FindNextFile:
BOOL FindNextFile(HANDLE hFindFile, // идентификатор поиска LPWIN32_FIND_DATA lpFindFileData); // адрес структуры // WIN32_FIND_DATAЧерез параметр hFindFile этой функции следует передать идентификатор поиска, полученный от функции FindFirstFile. Через параметр lpFindFileData необходимо передать адрес той же структуры типа WIN32_FIND_DATA, что была использована при вызове функции FindFirstFile.
Если функция FindNextFile завершилась успешно, она возвращает значение TRUE. При ошибке возвращается значение FALSE. Код ошибки можно получить с помощью функции GetLastError. В том случае, когда были просмотрены все файлы в каталоге, эта функция возвращает значение ERROR_NO_MORE_FILES. Данную ситуацию необходимо использовать для завершения цикла просмотра содержимого каталога.
3) После завершения цикла просмотра необходимо закрыть идентификатор поиска, вызвав для этого функцию FindClose:
BOOL FindClose(HANDLE hFindFile);В качестве единственного параметра этой функции передается идентификатор поиска, полученный от функции FindFirstFile.
Сообщение: CB_GetLBText
Копиpует элемент из списка ComboBox в имеющийся буфеp.
Приложение COMBOBOX создает простейший одноколоночный список в диалоговой панели. В этот список добавляются названия файлов и папок диска D:\\. Можно выделить строку с именем файла или папки при помощи мыши. Выбранная строка будет выведена на экран функцией MessageBox.
______________________________________________________
#define STRICT
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <string>
using namespace std;
#include "resource.h"
#define IDB_Button1 1
// Прототипы функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
// Имя класса окна
TCHAR const szClassName[] = _T("DialogAppClass");
// Заголовок окна
TCHAR const szWindowTitle[] = _T("Dialog Box Demo");
char Buffer[80];
HINSTANCE hInst;
HWND hComboBox;
// =====================================
// Функция WinMain
// =====================================
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg; // структура для работы с сообщениями
HWND hwnd; // идентификатор главного окна приложения
HWND hButton1;
WNDCLASS wc;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=wc.cbWndExtra=0;
wc.lpfnWndProc=WndProc;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName=(LPCTSTR)NULL;
wc.lpszClassName=szClassName;
if (!RegisterClass(&wc))
{
MessageBox(NULL,_T("Не могу зарегестрировать класс"),_T("Error"),MB_OK);
return 0;
}
hwnd=CreateWindow(szClassName,_T("Dilog"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL, hInstance,NULL);
if (!hwnd)
{
MessageBox(NULL,_T("Не могу создать окно"),_T("Error"),MB_OK);
return 0;
}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
// Создаем кнопку
hButton1 = CreateWindow(_T("button"), _T("Open..."), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20, 90, 30, hwnd, (HMENU)IDB_Button1, hInstance, NULL);
// Запускаем цикл обработки сообщений
while(GetMessage(&msg, 0, 0, 0))
{ DispatchMessage(&msg); }
return msg.wParam;
}
// =====================================
// Функция WndProc
// =====================================
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static DLGPROC lpfnDlgProc;
switch (msg)
{
case WM_COMMAND:
{
// Если нажата кнопка, выводим диалоговую панель
if(wParam == IDB_Button1)
{
lpfnDlgProc=(DLGPROC)MakeProcInstance((FARPROC)DlgProc,hInst);
DialogBox(hInst, MAKEINTRESOURCE(IDD_SELECT_FILE), hwnd, lpfnDlgProc);
}
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
// =====================================
// Функция DlgProc
// =====================================
BOOL CALLBACK DlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WIN32_FIND_DATA* fd=new WIN32_FIND_DATA;
HANDLE H=FindFirstFile(_T("D:\\*"),fd);
bool b=true;
int uSelectedItem;
switch(msg)
{
case WM_INITDIALOG:
{
hComboBox = CreateWindow(_T("combobox"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT, 30, 40, 250, 100, hdlg, (HMENU) IDC_COMBO, hInst, NULL);
SendMessage(hComboBox, WM_SETREDRAW, FALSE, 0);
while(b)
{
b=FindNextFile(H,fd);
SendMessage(hComboBox, CB_ADDSTRING, 0, (LPARAM)(LPSTR)(fd->cFileName));
}
FindClose(H);
delete fd;
SendMessage(hComboBox, WM_SETREDRAW, TRUE, 0);
return TRUE;
}
case WM_COMMAND:
{
switch(wParam)
{
case IDOK:
{
uSelectedItem = (int)SendMessage(hComboBox, CB_GETCURSEL, 0, 0);
if(uSelectedItem!= CB_ERR)
{
SendMessage(hComboBox,CB_GETLBTEXT,uSelectedItem,(LPARAM)Buffer);
MessageBox(hdlg,(LPCWSTR)Buffer,_T(" "), 0);
return TRUE;
}
}
case IDCANCEL:
{
EndDialog(hdlg, 0);
return TRUE;
}
}
}
}
return FALSE;
}


Самостоятельно на практике_3: разработать Windows-приложение, которое имело-бы одно главное окно со списком ComboBox и кнопкой button. В этот список необходимо вывести содержимое диска D:\\. При выборе строки в списке и при нажатии на кнопку button необходимо в окне MessageBox отобразить содержимое выделенной строки в списке.






