// Win32UI.cpp : 定义应用程序的入口点。
// #include "stdafx.h"
#include "Win32UI.h"
#include <stdio.h>
#include <commdlg.h>
#include <CommCtrl.h>
#define MAX_LOADSTRING 100 // 全局变量:
HINSTANCE hInst;                                // 当前实例
TCHAR szTitle[MAX_LOADSTRING];                    // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名 HWND hInstBase;                                // 当前主窗口实例
HWND hInstDown;
HWND hInstSend;
HWND hInstResv;
HWND hInstProcess;                                
HWND hInstEditDst;
HWND hInstEditSrc;
HWND hwndPB; // 此代码模块中包含的函数的前向声明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
//INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);      // TODO:  在此放置代码。
    MSG msg;
    HACCEL hAccelTable;     // 初始化全局字符串
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_WIN32UI, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);     ShowWindow(hInstBase, SW_SHOW);
    UpdateWindow(hInstBase);     // 执行应用程序初始化:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32UI));     // 主消息循环:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }     return (int) msg.wParam;
} //
//  函数:  MyRegisterClass()
//
//  目的:  注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASS wcex;     //wcex.cbSize = sizeof(WNDCLASSEX);     wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
    wcex.lpszMenuName    = NULL;
    wcex.lpszClassName    = szWindowClass;
    //wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));     return RegisterClass(&wcex);
} //
//   函数:  InitInstance(HINSTANCE, int)
//
//   目的:  保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;    hInst = hInstance; // 将实例句柄存储在全局变量中    hWnd = CreateWindow(szWindowClass, _T("文件传输"), WS_OVERLAPPED | WS_SYSMENU,
      320, 180, 730, 250, NULL, NULL, hInstance, NULL);    if (!hWnd)
   {
      return FALSE;
   }
   hInstBase = hWnd;
   hInstDown = CreateWindow(_T("BUTTON"), _T("发送"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 580, 30, 100, 90, hInstBase, (HMENU)1001, NULL, NULL);
   hInstProcess = CreateWindow(_T("Static"), _T("0 %"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 580, 150, 100, 30, hInstBase, (HMENU)1002, NULL, NULL);
   hInstSend = CreateWindow(_T("BUTTON"), _T("发送文件"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 490, 30, 80, 30, hInstBase, (HMENU)1003, NULL, NULL);
   hInstResv = CreateWindow(_T("BUTTON"), _T("接收路径"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 490, 90, 80, 30, hInstBase, (HMENU)1004, NULL, NULL);
   CreateWindow(_T("Static"), _T("进度条"), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 30, 150, 80, 30, hInstBase, (HMENU)1005, NULL, NULL);
   hInstEditSrc = CreateWindow(_T("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 30, 30, 450, 30, hInstBase, (HMENU)1006, NULL, NULL);
   hInstEditDst = CreateWindow(_T("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 30, 90, 450, 30, hInstBase, (HMENU)1007, NULL, NULL);
   SetWindowText(hInstEditSrc, _T("SrcFilename:"));
   SetWindowText(hInstEditDst, _T("DstFilename:"));
   EnableWindow(hInstDown, FALSE);    hwndPB = CreateWindowEx( //创建进度条        0,        PROGRESS_CLASS,        NULL,        WS_CHILD | WS_VISIBLE,        120, 150, 450, 30,            //位置和大小在WM_SIZE中设置        hInstBase,        (HMENU)0,        NULL,        NULL);
   SendMessage(hWnd, WM_CREATE, NULL, NULL);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);    return TRUE;
}
DWORD WINAPI PBThreadProc(LPVOID lpParameter)
{
    //进度条 start     ShowWindow(hwndPB, SW_SHOW);        //显示进度条     ShowWindow(hInstProcess, 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     //设置进度条当前值
    TCHAR sumdata[64];     for (size_t i = 1; i <= 100; i++)
    {
        SendMessage(hwndPB, PBM_SETPOS, (WPARAM)(i), (LPARAM)0);
        swprintf(sumdata, _T("%d %%"), i);
        SetDlgItemText(hInstBase, 1002, sumdata);
        Sleep(100);
    }     SetDlgItemText(hInstBase, 1001, _T("发送"));
    EnableWindow(hInstDown, TRUE);
    TCHAR buff[80] = _T("");     GetWindowText(hInstEditSrc, buff, 80);     return 0;
} void OpenFile()
{
    OPENFILENAME opfn;
    opfn.hwndOwner = hInstBase;
    WCHAR strFilename[MAX_PATH];//存放文件名  
    //初始化  
    ZeroMemory(&opfn, sizeof(OPENFILENAME));
    opfn.lStructSize = sizeof(OPENFILENAME);//结构体大小  
    //设置过滤  
    opfn.lpstrFilter = L"文本文件\0*.txt\0";
    //默认过滤器索引设为1  
    opfn.nFilterIndex = 1;
    //文件名的字段必须先把第一个字符设为 \0  
    opfn.lpstrFile = strFilename;
    opfn.lpstrFile[0] = '\0';
    opfn.nMaxFile = sizeof(strFilename);
    //设置标志位,检查目录或文件是否存在  
    opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
    //opfn.lpstrInitialDir = NULL;  
    // 显示对话框让用户选择文件  
    if (GetOpenFileName(&opfn))
    {
        //在文本框中显示文件路径  
        SetWindowText(hInstEditSrc, opfn.lpstrFile);
    }
    EnableWindow(hInstBase, TRUE);
}
//
//  函数:  WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    处理主窗口的消息。
//
//  WM_COMMAND    - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY    - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    //PAINTSTRUCT ps;
    //HDC hdc;     switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);         switch (wmEvent)
        {
        case BN_CLICKED:
            {
                if (1001 == wmId)
                {
                    SetDlgItemText(hInstBase, 1001, _T("正在发送..."));
                    EnableWindow(hInstDown, FALSE);
                    //创建线程
                    CreateThread(
                        NULL,
                        0,
                        (LPTHREAD_START_ROUTINE)PBThreadProc,
                        NULL,
                        0,
                        0
                        );
                }
                else if (1003 == wmId)
                {
                    EnableWindow(hInstBase, FALSE);
                    OpenFile();
                }
            }
            break;
        default:
            break;
        }
        // 分析菜单选择:
        switch (wmId)
        {
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

 

Win32GUI代码示例的更多相关文章

  1. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  2. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  3. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  4. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  5. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  6. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  7. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  8. C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

    Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

  9. 领域驱动开发推荐代码示例 — Microsoft NLayerApp

    简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...

随机推荐

  1. Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询

    Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...

  2. ViewPageIndicator

    关于我的总结 1.写一个类extend HorizontalScrollView 实现ViewPagerIndicator,这样写index需要自己写有点啰嗦 2.自定义一个类extends Hori ...

  3. 如何在 Linux 上永久挂载一个 Windows 共享

    导读 如果你已经厌倦了每次重启 Linux 就得重新挂载 Windows 共享,读读这个让共享永久挂载的简单方法. 在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情.想想多 ...

  4. [NOI2008] 志愿者招募[流量平衡]

    288. [NOI2008] 志愿者招募 ★★★★   输入文件:employee.in   输出文件:employee.out   简单对比时间限制:2 s   内存限制:512 MB [问题描述] ...

  5. 【POJ2516】Minimum Cost

    [POJ2516]Minimum Cost 题意:有N个收购商.M个供应商.K种物品.对于每种物品,每个供应商的供应量和每个收购商的需求量已知.每个供应商与每个收购商之间运送该物品的运费已知.求满足收 ...

  6. LAMP集群项目二 初始化系统

    1.关闭防火墙 /etc/init.d/iptables stop chkconfig iptables off 2.关闭selinux cat /etc/selinux/config #查看状态 s ...

  7. Zabbix数据库表结构

    上一篇:Zabbix分布式监控 acknowledges 当出现报错的时候记录 查看着张表记录了一个事件 actions 动作 自动发现 问题告警 恢复告警 自动注册 alerts 报警信息 同web ...

  8. Python resources

    我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架.网络 ...

  9. Spark源码分析 – Executor

    ExecutorBackend 很简单的接口 package org.apache.spark.executor /** * A pluggable interface used by the Exe ...

  10. Sqoop简介及使用

    一.Sqoop概述 1)官网 http://sqoop.apache.org/ 2)场景 传统型缺点,分布式存储.把传统型数据库数据迁移. Apache Sqoop(TM)是一种用于在Apache H ...