Pushok

File browser (NEW)

Mar 30th, 2011
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.19 KB | None | 0 0
  1. #include <windows.h>
  2. #include "resource.h"
  3. #include <tchar.h>
  4. #include <vector>
  5. #include <string>
  6.  
  7. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  8.  
  9. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
  10.     LPSTR lpCmdLine, int nCmdShow )
  11. {
  12.     MSG  msg ;    
  13.     HWND hwnd;
  14.     WNDCLASS wc;
  15.  
  16.     wc.style         = CS_HREDRAW | CS_VREDRAW;
  17.     wc.cbClsExtra    = 0;
  18.     wc.cbWndExtra    = 0;
  19.     wc.lpszClassName = TEXT( "Window" );
  20.     wc.hInstance     = hInstance ;
  21.     wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
  22.     wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1);
  23.     wc.lpfnWndProc   = WndProc;
  24.     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  25.     wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
  26.  
  27.     RegisterClass(&wc);
  28.     hwnd = CreateWindow( wc.lpszClassName, TEXT("File Manager"),
  29.         WS_SYSMENU | WS_VISIBLE,
  30.         100, 100, 640, 250, NULL, NULL, hInstance, NULL);  
  31.  
  32.     ShowWindow(hwnd, nCmdShow);
  33.     UpdateWindow(hwnd);
  34.  
  35.     while( GetMessage(&msg, NULL, 0, 0)) {
  36.         TranslateMessage(&msg);
  37.         DispatchMessage(&msg);
  38.     }
  39.     return (int) msg.wParam;
  40. }
  41.  
  42. std::vector< std::basic_string< TCHAR > > fVec;
  43.  
  44. LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
  45. {
  46.     static HWND listbox = 0;
  47.     static HWND button = 0;
  48.     static HWND file_name = 0;
  49.     static HWND path = 0;
  50.     static HWND fformat = 0;
  51.     static HWND aadd = 0;
  52.     static HWND applets = 0;
  53.     static HWND del = 0;
  54.  
  55.     switch(msg)  
  56.     {
  57.     case WM_DESTROY:
  58.         {
  59.             PostQuitMessage(0);
  60.             return 0;
  61.         }
  62.     case WM_CREATE:
  63.         {
  64.             listbox = CreateWindow(TEXT("listbox") , NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY | WS_VSCROLL,
  65.                 10, 10, 320, 180, hwnd,(HMENU) 1, NULL, NULL);
  66.             button = CreateWindow(TEXT("button") , TEXT("Создать"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
  67.                 420, 160, 208, 25, hwnd,(HMENU) 2, NULL, NULL);
  68.             file_name = CreateWindow(TEXT("edit") , TEXT("file.txt"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOVSCROLL,
  69.                 335, 90, 293, 25, hwnd,(HMENU) 3, NULL, NULL);
  70.             path = CreateWindow(TEXT("edit") , TEXT("default"), WS_CHILD | WS_VISIBLE | WS_BORDER | ES_WANTRETURN | ES_MULTILINE,
  71.                 335, 10, 293, 75, hwnd,(HMENU) 4, NULL, NULL);
  72.             fformat = CreateWindow(TEXT("button") , TEXT("Формат"), WS_CHILD | WS_VISIBLE | BS_CHECKBOX,
  73.                 335, 160, 80, 25, hwnd,(HMENU) 5, NULL, NULL);
  74.             aadd = CreateWindow(TEXT("button") , TEXT("Add"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
  75.                 335, 120, 40, 25, hwnd,(HMENU) 6, NULL, NULL);
  76.             del = CreateWindow(TEXT("button") , TEXT("Clr"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
  77.                 375, 120, 40, 25, hwnd,(HMENU) 7, NULL, NULL);
  78.             applets = CreateWindow(TEXT("edit") , TEXT("апплет"), WS_CHILD | WS_VISIBLE | WS_BORDER,
  79.                 420, 120, 208, 25, hwnd,(HMENU) 8, NULL, NULL);
  80.             break;
  81.         }
  82.     case WM_COMMAND:
  83.         {
  84.             switch(LOWORD(wParam)){
  85.             case ID_FILE_INFO:
  86.                 {
  87.                     MessageBox(0, L"Programm by Push", L"Info", 0);
  88.                     break;
  89.                 }
  90.             case LBN_SELCHANGE:
  91.                 {
  92.                     if(HIWORD(wParam) == 1){
  93.                         TCHAR* buff[2] = {(TCHAR*)calloc(MAX_PATH, sizeof(TCHAR)), (TCHAR*)calloc(MAX_PATH, sizeof(TCHAR))};
  94.  
  95.                         GetWindowText(path, buff[0], MAX_PATH);
  96.  
  97.                         if(!_tccmp(buff[0], L"default"))
  98.                             GetCurrentDirectory(MAX_PATH, buff[0]);
  99.  
  100.                         SendMessage(listbox, LB_GETTEXT, SendMessage(listbox, LB_GETCURSEL, NULL, NULL), (LPARAM)buff[1]);
  101.                         if(MessageBox(hwnd, L"Вы хотите запустить этот файл?", L"Question", MB_OKCANCEL) == IDOK)
  102.                             ShellExecute(hwnd, L"open", buff[1], NULL, buff[0], SW_MAXIMIZE);
  103.  
  104.                         free(buff[0]);
  105.                         free(buff[1]);
  106.                     }
  107.                     break;
  108.                 }
  109.             case IDM_SEARCH:
  110.                 {
  111.                     TCHAR buff[2048];
  112.                     WIN32_FIND_DATA fData = {0};
  113.                     GetWindowText(path, buff, sizeof(buff));
  114.  
  115.                     if(!_tccmp(buff, L"default"))
  116.                         GetCurrentDirectory(sizeof(buff), buff);
  117.  
  118.                     wcscat(buff, L"\\*");
  119.  
  120.                     HANDLE hFile = FindFirstFile(buff, &fData);
  121.  
  122.                     if(hFile != INVALID_HANDLE_VALUE)
  123.                         do {
  124.                             if(_tccmp(fData.cFileName, L".") && _tccmp(fData.cFileName, L"..")){
  125.                                 BOOL isInvalid = FALSE;
  126.                                 _tcscpy(buff, fData.cFileName);
  127.  
  128.                                 if(!IsDlgButtonChecked(hwnd, 5))
  129.                                     _ftcstok(buff, L".");
  130.  
  131.                                 if(!fVec.empty())
  132.                                     for(std::vector< std::basic_string< TCHAR > >::iterator i = fVec.begin(); i < fVec.end(); i++)
  133.                                         if(!_tcsstr(buff, i->c_str())) isInvalid = TRUE;
  134.  
  135.                                 if(isInvalid) continue;
  136.  
  137.                                 SendMessage(listbox, LB_ADDSTRING, NULL, (LPARAM)buff);
  138.                             }
  139.                         } while (FindNextFile(hFile, &fData));
  140.  
  141.                     FindClose(hFile);
  142.                     break;
  143.                 }
  144.             case IDM_CLEAR_LIST:
  145.                 {
  146.                     SendMessage(listbox, LB_RESETCONTENT, 0, 0);
  147.                     break;
  148.                 }
  149.             case 5:
  150.                 {
  151.                     CheckDlgButton(hwnd, 5, IsDlgButtonChecked(hwnd, 5) ? BST_UNCHECKED : BST_CHECKED);
  152.                 }
  153.             }
  154.             if(HIWORD(wParam) == BN_CLICKED)
  155.             {
  156.                 switch(LOWORD(wParam))
  157.                 {
  158.                 case 2:
  159.                     {
  160.                         TCHAR* file = (TCHAR*)calloc(MAX_PATH, sizeof(TCHAR)), *Tptr;
  161.                         DWORD dd;
  162.                         std::vector< std::basic_string< TCHAR > > fVec;
  163.  
  164.                         GetWindowText(file_name, file, MAX_PATH);
  165.                         Tptr = _ftcstok(file, L",");
  166.  
  167.                         while(Tptr != NULL)
  168.                         {
  169.                             fVec.push_back(Tptr);
  170.                             Tptr = _ftcstok(NULL, L",");
  171.                         }
  172.  
  173.                         for(std::vector< std::basic_string< TCHAR > >::iterator i = fVec.begin(); i!= fVec.end();i++)
  174.                         {
  175.                             HANDLE hFile = CreateFile(i->c_str(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
  176.  
  177.                             for(WORD i=0;i < SendMessage(listbox, LB_GETCOUNT, 0, 0); i++)
  178.                             {
  179.                                 SendMessage(listbox, LB_GETTEXT, i, (LPARAM)file);
  180.                                 _tcscat(file, L"\r\n");
  181.                                 WriteFile(hFile, file, _tcsclen(file)*sizeof(TCHAR), &dd, 0);
  182.                             }
  183.    
  184.                             CloseHandle(hFile);
  185.                         }
  186.  
  187.                         free(file);
  188.                         break;
  189.                     }
  190.                 case 6:
  191.                     {
  192.                         TCHAR buff[1024];
  193.                         GetWindowText(applets, buff, sizeof(buff));
  194.  
  195.                         fVec.push_back(buff);
  196.  
  197.                         MessageBox(hwnd, (fVec.end() - 1)->c_str(), L"Апплет добавлен", MB_OK);
  198.                         break;
  199.                     }
  200.                 case 7:
  201.                     {
  202.                         fVec.clear();
  203.                         MessageBox(hwnd, L"Список апплетов пуст.", L"Информация", 0);
  204.                         break;
  205.                     }
  206.                 }
  207.             }
  208.  
  209.             break;
  210.         }
  211.     }
  212.     return DefWindowProc(hwnd, msg, wParam, lParam);
  213. }
Advertisement
Add Comment
Please, Sign In to add comment