◀ANSI版開発トップへ
  • 2992 サンプル
    • 2994 Re: サンプル
      • 2995 Re2: サンプル
  • [2992] サンプル wmlhq 2003年08月06日 16:54

    開発が停滞しているようだから、ヒントをあげます。

    typedef BOOL (FAR * ENUMFILEPROC)(LPCTSTR lpszFileTitle, LPWIN32_FIND_DATA lpw32fd, LPARAM lParam)

    BOOL EnumFiles(LPCTSTR lpszSpec, ENUMFILEPROC lpfn, LPARAM lParam)
    {
    WIN32_FIND_DATA w32fd;
    HANDLE hFind = FindFirstFile(lpszSpec, &w32fd);
    if(hFind != INVALID_HANDLE_VALUE) {
    do {
    // Ignore _T(".") and _T("..").
    if(PathIsTrivial(lpszSpec, &w32fd))
    continue;
    if(!(*lpfn)(lpszSpec, &w32fd, lParam))
    break;
    } while(FindNextFile(hFind, &w32fd));
    return FindClose(hFind);
    }
    return FALSE;
    }

    BOOL EnumDirListFiles(LPCTSTR lpszDir, ENUMFILEPROC lpfn, LPARAM lParam)
    {
    int cchDirLen = hq_strlen(lpszDir);
    if(lpszDir[cchDirLen - 1] == '\\')
    cchDirLen--;
    int cchMax = cchDirLen + (2 + 1); // hq_strlen("\\*") == 2.

    LPTSTR lpszSpec = (LPTSTR)hq_malloc(cchMax * sizeof(TCHAR));
    if(lpszSpec != NULL) {
    hq_strcpy(lpszSpec, lpszDir);
    hq_strcpy(lpszSpec + cchDirLen, _T("\\*"));
    BOOL fResult = EnumFiles(lpszSpec, lpfn, lParam);
    hq_free(lpszSpec);
    return TRUE;
    }
    return FALSE;
    }
    // BOOL EnumDropedFileProc(LPCTSTR lpszFile, OPTIONAL LPPOINT lppt, LPARAM lParam);
    typedef BOOL (FAR * ENUMDROPEDFILEPROC)(LPCTSTR lpszFile, OPTIONAL LPPOINT lppt, LPARAM lParam);

    BOOL EnumDroppedFiles(HDROP hdrop, ENUMDROPEDFILEPROC lpfn, LPARAM lParam)
    {
    if(hdrop == NULL) {
    SetLastError(ERROR_INVALID_HANDLE);
    return FALSE;
    }

    DWORD dwError = 0;
    int cchMax = MAX_PATH;
    LPTSTR lpszFile = (LPTSTR)hq_malloc(cchMax * sizeof(TCHAR));
    if(lpszFile != NULL) {
    POINT pt;
    LPPOINT lppt = (DragQueryPoint(hdrop, &pt) ? &pt : NULL);
    UINT cFiles = DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);
    for(UINT uIndex = 0 ; uIndex < cFiles ; uIndex++) {
    int cchMaxNew = DragQueryFile(hdrop, uIndex, NULL, 0) + 1;
    if(cchMax < cchMaxNew) {
    cchMax = cchMaxNew;
    lpszFile = (LPTSTR)hq_realloc(lpszFile, cchMaxNew * sizeof(TCHAR));
    }
    if(DragQueryFile(hdrop, uIndex, lpszFile, cchMax)) {
    if(!(*lpfn)(lpsz, lppt, lParam))
    break;
    } else dwError = GetLastError();
    } else dwError = GetLastError();
    hq_free(lpszFile);
    } else dwError = GetLastError();
    SetLastError(dwError);
    return dwError != 0;
    }
    • [2994] Re: サンプル げんた 2003年08月07日 01:49

      >発言者: wmlhq
      >開発が停滞しているようだから、ヒントをあげます。
      Thanks!
      で何のヒントだっけ?(笑)
      • [2995] Re2: サンプル wmlhq 2003年08月07日 16:57

        ▼ げんたさん
        > Thanks!
        > で何のヒントだっけ?(笑)

        ボケてました。すみません。
        ところで、POSIXでは、コマンドラインのオプションは最初につけるはずでは? 複数ファイルに別々のオプションを指定するためにも、これは制限した方がよろしいかと。