Win32GUICode

// WIN32DownLoad.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "WIN32DownLoad.h"

#include <wininet.h>
#include <stdio.h>
#include <stdlib.h>
#include <mmsystem.h>
#include <commdlg.h>
#include <Shlwapi.h>

#include <commctrl.h>        //InitCommonControls

#pragma comment(lib, "comctl32") //InitCommonControls

#pragma comment(lib ,"Wininet.lib")
#pragma comment(lib,"winmm.lib")

LRESULT CALLBACK WindowProc(
                            HWND hwnd,      // handle to window
                            UINT uMsg,      // message identifier
                            WPARAM wParam,  // first message parameter
                            LPARAM lParam   // second message parameter
                            );

TCHAR classname[80]= _T("download");
HWND hbutton1,hbutton2,heidt;
HWND hwnd,hwndPB ;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    WNDCLASS ex;
    ex.cbClsExtra = 0;
    ex.cbWndExtra = 0;
    ex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
    ex.hCursor    = LoadCursor(NULL,IDC_ARROW);
    ex.hIcon      = LoadIcon(NULL,IDI_APPLICATION );
    ex.hInstance  = hInstance ;
    ex.lpfnWndProc = WindowProc ;
    ex.lpszClassName = classname ;
    ex.lpszMenuName  = NULL ;
    ex.style    = CS_VREDRAW|CS_HREDRAW ;

    if( RegisterClass(&ex) == 0 )
    {
        MessageBox(NULL,_T("注册窗口失败!"),_T("提示"),MB_OK);
    }

    hwnd= CreateWindow(classname,_T("技术"),WS_OVERLAPPEDWINDOW,320,0,700,700,NULL,NULL,hInstance,NULL);

    if( hwnd == NULL )
    {
        MessageBox(NULL,_T("创建窗口失败"),_T("error"),MB_OK);
    }

    ShowWindow(hwnd,SW_SHOW);
    UpdateWindow(hwnd);

    MSG msg;

    while(GetMessage(&msg,NULL,NULL,NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;

}

DWORD WINAPI PBThreadProc( LPVOID lpParameter )
{
    //CHAR szHead = (CHAR )lpParameter;

    //进度条 start

    ShowWindow( hwndPB , SW_SHOW );        //显示进度条

    ShowWindow( hbutton2 , SW_SHOW );  //显示百分比控件

    PBRANGE range;                        //进度条的范围

    SendMessage( hwndPB, PBM_SETRANGE,    //设置进度条的范围

        (WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );

    SendMessage( hwndPB, PBM_GETRANGE,    //获取进度条的范围

        (WPARAM)TRUE,                    //TRUE 表示返回值为范围的最小值,FALSE表示返回最大值

        (LPARAM)&range );

    //进度条 end

    DWORD dwFlags;
    if(!InternetGetConnectedState(&dwFlags,0))
    {
        MessageBox(hwnd,_T("没有网络连接!"),_T("提示"),MB_OK);
        return 0;
    }

    TCHAR strAgent[64];
    swprintf(strAgent,_T("Agent%ld"),timeGetTime());
    HINTERNET hopen;
    if(!(dwFlags&INTERNET_CONNECTION_PROXY)){

        hopen=InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,NULL,NULL,0);

    }else{
        hopen=InternetOpen(strAgent,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);

    }
    if(!hopen){
        MessageBox(hwnd,_T("打不开网络连接!"),_T("提示"),MB_OK);
        return 0;
    }

    TCHAR szHead[]= _T("Accept: */*\r\n\r\n");
    void * szTemp[16384];
    HINTERNET hConnect;
    FILE *fp;

    TCHAR  szUrlAdd[255];
    GetWindowText( heidt , szUrlAdd , 255 );

    if(!(hConnect=InternetOpenUrl(hopen,szUrlAdd,szHead,wcslen(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE,0))){
        MessageBox(hwnd,_T("打开网络地址失败!"),_T("提示"),MB_OK);
        return 0;
    }

    TCHAR pBuf[MAX_PATH];                                               //存放路径的变量
    GetCurrentDirectory(MAX_PATH,pBuf);                   //获取程序的当前目录
    wcscat(pBuf, wcsrchr( szUrlAdd ,‘/‘) );

    fp=_wfopen( pBuf ,_T("wb+"));

    if(fp==NULL){
        MessageBox(hwnd,_T("打开本地文件失败!"),_T("提示"),MB_OK);
        return 0;
    }

    DWORD dwByteToRead=0;
    DWORD dwSizeOfRq=4;
    DWORD dwBytes=0;
    DWORD sum=0;
    DWORD dwSize=0;
    if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,&dwSizeOfRq,NULL)){

        dwByteToRead=0;

    }

    EnableWindow( hbutton1 , FALSE );
    SetDlgItemText(hwnd,1001,_T("正在下载..."));
    TCHAR sumdata[64];

    do{

        if(!InternetReadFile(hConnect,szTemp,16384,&dwSize)){
            InternetCloseHandle(hopen);
            fclose(fp);
            MessageBox(hwnd,_T("网络中断!"),_T("提示"),MB_OK);
            return 0;
        }
        if(dwSize==0){
            break;
        }else{
            sum+=dwSize;
            fwrite(szTemp,dwSize,1,fp);

            swprintf(sumdata,_T("%d %%"),(sum*100)/dwByteToRead);

            //设置进度条当前值
            SendMessage( hwndPB, PBM_SETPOS, (WPARAM)(sum*100)/dwByteToRead, (LPARAM)0 );

            SetDlgItemText(hwnd,1001,sumdata);
            SetDlgItemText(hwnd,1002,sumdata);

        }
    }while(TRUE);

    EnableWindow( hbutton1 , TRUE );
    SetDlgItemText(hwnd,1001,_T("下载"));
    InternetCloseHandle(hopen);
    fclose(fp);

    MessageBox(hwnd,_T("下载成功"),_T("提示"),MB_OK);

    SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //将进度条复位

//     ShowWindow( hwndPB , SW_HIDE );        //隐藏进度条
//
//     ShowWindow( hbutton2 , SW_HIDE );  //隐藏 百分比控件

    return 0;
}

LRESULT CALLBACK WindowProc(
                            HWND hwnd,      // handle to window
                            UINT uMsg,      // message identifier
                            WPARAM wParam,  // first message parameter
                            LPARAM lParam   // second message parameter
                            )
{
    switch(uMsg)
    {
    case WM_DESTROY:
        {
            PostQuitMessage(0);
        }
        break;

    case WM_CREATE:
        {
            hbutton1= CreateWindow(_T("BUTTON"),_T("下载"),WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,550,200,100,30,hwnd,(HMENU)1001,NULL,NULL);
            hbutton2= CreateWindow(_T("Static"),_T("0 %"),WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,530,260,100,30,hwnd,(HMENU)1002,NULL,NULL);
            heidt= CreateWindow(_T("EDIT"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,70,200,450,30,hwnd,NULL,NULL,NULL);
            SetWindowText( heidt , _T("http://dl.client.baidu.com/BaiduPlayer/BaiduPlayer1.19.0.78_1.exe") );

            hwndPB = CreateWindowEx( //创建进度条

                0,

                PROGRESS_CLASS,

                NULL,

                WS_CHILD | WS_VISIBLE,

                70,260,450,30,            //位置和大小在WM_SIZE中设置

                hwnd,

                (HMENU)0,

                ((LPCREATESTRUCT)lParam)->hInstance,

                NULL);

            //隐藏进度条 和 百分比 控件
//             ShowWindow( hwndPB , SW_HIDE );
//             ShowWindow( hbutton2 , SW_HIDE );
        }
        break;

    case WM_COMMAND:
        {
            //wParam HIWORD(wParam) LOWORD(wParam) 高位是事件 低位才是按钮
            switch(HIWORD(wParam))
            {
            case BN_CLICKED: //这里处理是单击
                {
                    if(LOWORD(wParam) == 1001)
                    {

                        TCHAR buff[80]=_T("");
                        ::GetWindowText(heidt,buff,80);                                    

                        //创建线程
                        CreateThread(
                            NULL,
                            0,
                            (LPTHREAD_START_ROUTINE)PBThreadProc,
                            buff,
                            0,
                            0
                            );

                    }
                    if(LOWORD(wParam) == 1002)
                    {
                        PostQuitMessage(0);
                    }
                }
                break;
            }

        }
        break;
    }

    return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

转自:http://www.cctry.com/thread-238862-1-1.html

时间: 2024-10-25 07:41:34

Win32GUICode的相关文章