xref: /reactos/modules/rostests/tests/dirdlg/dirdlg.c (revision 1734f297)
1 #include <windows.h>
2 #include <string.h>
3 #include <stdio.h>
4 #include <io.h>
5 #include "resource.h"
6 
7 static char selected[MAX_PATH + 1];
8 
9 INT_PTR
10 CALLBACK
11 DlgMainProc(
12   HWND hwndDlg,
13   UINT uMsg,
14   WPARAM wParam,
15   LPARAM lParam
16 )
17 {
18   char dir[MAX_PATH + 1];
19 
20   switch(uMsg)
21   {
22     case WM_COMMAND:
23     {
24       switch(HIWORD(wParam))
25       {
26         case LBN_DBLCLK:
27         {
28           switch(LOWORD(wParam))
29           {
30             case IDC_DIRS:
31             {
32               if(DlgDirSelectEx(hwndDlg, dir, MAX_PATH, IDC_DIRS))
33               {
34                 chdir(dir);
35                 GetCurrentDirectory(MAX_PATH, dir);
36                 DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES);
37               }
38               else
39               {
40                 SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_OK, 0), 0);
41               }
42               break;
43             }
44           }
45           break;
46         }
47         default:
48         {
49           switch(LOWORD(wParam))
50           {
51             case IDC_OK:
52             {
53               char file[MAX_PATH + 1];
54               int len;
55 
56               if(!DlgDirSelectEx(hwndDlg, file, MAX_PATH, IDC_DIRS))
57               {
58                 GetCurrentDirectory(MAX_PATH, selected);
59                 len = strlen(selected);
60                 if(strlen(file))
61                 {
62                   if(selected[len - 1] != '\\')
63                   {
64                     lstrcat(selected, "\\");
65                   }
66                   lstrcat(selected, file);
67                   EndDialog(hwndDlg, IDC_OK);
68                 }
69               }
70               break;
71             }
72             case IDC_CANCEL:
73             {
74               EndDialog(hwndDlg, IDC_CANCEL);
75               break;
76             }
77           }
78           break;
79         }
80       }
81       break;
82     }
83     case WM_INITDIALOG:
84     {
85       SendDlgItemMessage(hwndDlg, IDC_DIRS, LB_SETCOLUMNWIDTH, 150, 0);
86       GetCurrentDirectory(MAX_PATH, dir);
87       DlgDirList(hwndDlg, dir, IDC_DIRS, IDC_DIREDIT, DDL_DIRECTORY | DDL_DRIVES);
88       SetFocus(GetDlgItem(hwndDlg, IDC_DIRS));
89       break;
90     }
91     case WM_CLOSE:
92     {
93       EndDialog(hwndDlg, IDC_CANCEL);
94       return TRUE;
95     }
96   }
97   return FALSE;
98 }
99 
100 int WINAPI
101 WinMain(
102   HINSTANCE hInstance,
103   HINSTANCE hPrevInstance,
104   LPSTR lpszCmdLine,
105   int nCmdShow)
106 {
107   char str[MAX_PATH + 32];
108   if(DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DlgMainProc) == IDC_OK)
109   {
110     sprintf(str, "You selected \"%s\"", selected);
111     MessageBox(0, str, "Selected file", MB_ICONINFORMATION);
112   }
113   return 0;
114 }
115 
116