본문 바로가기

Windows/Windows API

File list

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("FileList");
void GetFileList(char *path);
int filenum = 0;
char filename[100][300];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
     ,LPSTR lpszCmdParam,int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst=hInstance;

    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=(WNDPROC)WndProc;
    WndClass.lpszClassName=lpszClass;
    WndClass.lpszMenuName=NULL;
    WndClass.style=CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&WndClass);

    hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        NULL,(HMENU)NULL,hInstance,NULL);
    ShowWindow(hWnd,nCmdShow);
    hWndMain=hWnd;

    while(GetMessage(&Message,0,0,0)) {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }

    return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    int index01;

    switch(iMessage) {
    case WM_CREATE:
        GetFileList("*.*"); // 전체 파일을 확인 한 후 확장자별로 처리하든
                            // 파일 종류가 특정한 몇가지라면 *.txt, *.asp등으로 여러번 호출할 후 처리하든지...
        // 일단 파일 리스트를 불러온 후
        // 파일 처리
        // code
        return 0;

    case WM_PAINT:
        hdc=BeginPaint(hWnd, &ps);
        if ( filenum > 0 )
        {
            for ( index01 = 0; index01 < filenum; index01++ )
            {
                TextOut(hdc, 0, index01 * 18, filename[index01], lstrlen(filename[index01]) );
            }
        }
        EndPaint(hWnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

void GetFileList(char *path)    // 파일리스트만 보여줌
{

    HANDLE hFind;
    WIN32_FIND_DATA fd;
    BOOL bRet = TRUE;
    char subpath[100][300];

    hFind = FindFirstFile( path, &fd);

    while ( hFind != INVALID_HANDLE_VALUE && bRet)
    {
        if ( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) == 0 )
        {
            strcpy(filename[filenum], fd.cFileName );
            filenum++;
        }

//     else
//     {
            // sub folder 처리 이렇게 하려면 링크드 리스트를 사용하셔야겠죠... 물론 여기 변수들도 포인터로 바꾸시구
//         GetFileList(subpath);
//     }

        bRet = FindNextFile( hFind, &fd);
    }
    FindClose(hFind);

    return;
}

'Windows > Windows API' 카테고리의 다른 글

TRANSPARENT BACKGROUND  (0) 2013.10.01
ClientToScreen  (0) 2013.10.01
디렉토리 생성 (하위 디렉토리 포함) CreateDirectory (Sub)  (0) 2013.10.01
GDI+ 선의 끝모양  (0) 2013.10.01
GDI+ 안티 알라이싱  (0) 2013.10.01