150,50,470, 400, Hwnd,(hmenu)id_edit1,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
Кожне дочірнє вікно має дескриптор вікна і його ідентифікатор, що є унікальним серед інших. Знання одного з цих елементів дозволяє вам одержати іншиї. Якщо ви знаєте дескриптор дочірнього вікна, то можете одержати його ідентифікатор у такий спосіб:
id = GetWindowLong (hwndChild, GWL_ID);
Тут, при створенні статичного елемента керування, використовується функція getcwd(), що служить для одержання поточного робочого каталогу. Т.е. повний шлях до поточного робочому каталогу виводиться в статичному елементі керування.
Створення смуг прокручування у вікні редагування, здійснюється шляхом додавання наступних значень у завданні стилю вікна: WS_HSCROLL| WS_VSCROLL.
А тепер, щоб заповнити список іменами усіх файлів поточного каталогу, додайте до програми наступний код:
…
hWndEdit=CreateWindow("edit",NULL, WS_CHILDWINDOW|ES_MULTILINE|
WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL| ES_AUTOVSCROLL|ES_AUTOHSCROLL,
150,50,470, 400, hwnd,(HMENU)ID_edit1,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
SendMessage (hwndList, LB_DIR, DDL_READWRITE|DDL_READONLY| DDL_HIDDEN|DDL_SYSTEM|DDL_DIRECTORY, (LPARAM) "*.*") ;
return 0 ;
При зміні розмірів вікна, необхідно динамічно обновляти вміст структури rect:
…
SendMessage (hwndList, LB_DIR, DDL_READWRITE|DDL_READONLY| DDL_HIDDEN|DDL_SYSTEM|DDL_DIRECTORY, (LPARAM) "*.*") ;
return 0 ;
case WM_SIZE :
rect.right = LOWORD (lParam) ;
rect.bottom = HIWORD (lParam) ;
return 0 ;
…
При запуску додатка фокус уведення повинний одержувати список:
rect.bottom = HIWORD (lParam) ;
return 0 ;
case WM_SETFOCUS :
SetFocus (hwndList) ;
return 0 ;
Обробка повідомлення WM_COMMAND буде виглядати в такий спосіб:
…
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static char szFile[MAXPATH], szBuffer[MAXPATH + 1] ;
static HWND hwndList, hwndText, hWndEdit;
static OFSTRUCT ofs ;
static BOOL bValidFile ;
case WM_SETFOCUS :
SetFocus (hwndList) ;
return 0 ;
case WM_COMMAND :
if (LOWORD (wParam) == 1 && HIWORD (wParam) == LBN_DBLCLK)
{
if (LB_ERR == (i = SendMessage (hwndList,
LB_GETCURSEL, 0, 0L)))
break ;
SendMessage (hwndList, LB_GETTEXT, i, (LPARAM) szBuffer) ;
if (-1 != OpenFile (szBuffer, &ofs, OF_EXIST | OF_READ))
{
bValidFile = TRUE ;
strcpy (szFile, szBuffer) ;
getcwd (szBuffer, MAXPATH) ;
if (szBuffer [strlen (szBuffer) - 1] != '\\')
strcat (szBuffer, "\\") ;
SetWindowText (hwndText, strcat (szBuffer, szFile)) ;
}
else
{
bValidFile = FALSE ;
szBuffer [strlen (szBuffer) - 1] = '\0' ;
chdir (szBuffer + 1) ;
getcwd (szBuffer, MAXPATH) ;
SetWindowText (hwndText, szBuffer) ;
SendMessage (hwndList, LB_RESETCONTENT, 0, 0L) ;
SendMessage (hwndList, LB_DIR, 0x37, (LONG) "*.*") ;
}