windos 32 vs2015示例程序与传统程序对比

vs2015版

// Win32Project1.cpp : 定义应用程序的入口点。
#include "stdafx.h"
#include "Win32Project1.h"
#define MAX_LOADSTRING 100
// 全局变量: 
HINSTANCE hInst;                                // 当前实例
WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
// 此代码模块中包含的函数的前向声明: 
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 wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
   // TODO: 在此放置代码。
    // 初始化全局字符串
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
    // 执行应用程序初始化: 
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));
    MSG msg;
   // 主消息循环: 
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return (int) msg.wParam;
}
//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW 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(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WIN32PROJECT1);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    return RegisterClassExW(&wcex);
}
//
//   函数: InitInstance(HINSTANCE, int)
//
//   目的: 保存实例句柄并创建主窗口
//
//   注释: 
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // 将实例句柄存储在全局变量中
   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
   if (!hWnd)
   {
      return FALSE;
   }
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   return TRUE;
}
//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    处理主窗口的消息。
//
//  WM_COMMAND  - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY  - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 分析菜单选择: 
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: 在此处添加使用 hdc 的任何绘图代码...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

传统版

// WinHello.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "WinHello.h"

//处理窗口绘制消息(WM_PAINT)
void OnPaint(HWND hWnd)
{
    PAINTSTRUCT ps;//获取设备上下文句柄
    HDC hDC = BeginPaint(hWnd, &ps);
    RECT rcClient;//获取窗口客户区矩形
    GetClientRect(hWnd, &rcClient);
    
    //在窗口客户区内显示文本
    DrawText(hDC, _T("hello world"), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    EndPaint(hWnd, &ps);//释放设备上下文

}

//主窗口过程函数
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

    //对不同的消息做不同的处理
    switch (uMsg)
    {
    case WM_PAINT://窗口绘制消息
        OnPaint(hWnd);
        return 0;
    case WM_DESTROY://窗口销毁消息
        PostQuitMessage(0);//发送WM_QUIT消息
        return 0;
    }

    //对不感兴趣的消息交给缺省窗口过程函数处理
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

//注册窗口类
ATOM InitApplication(HINSTANCE hInstance)
{
    WNDCLASS wc = { 0 };
    wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类风格
    wc.lpfnWndProc = MainWndProc;//窗口过程函数指针
    wc.cbClsExtra = 0;//窗口类附加数据字节数
    wc.cbWndExtra = 0;//窗口附加数据字节数
    wc.hInstance = hInstance;//应用程序实例句柄
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);//窗口图标句柄
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口光标句柄
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);//窗口背景句柄
    wc.lpszMenuName = NULL;//窗口菜单资源名
    wc.lpszClassName = _T("MAIN");//窗口类型
    return RegisterClass(&wc);//将wc结构存入内核

}

//创建、显示、并刷新窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    //创建窗口
    HWND hWnd=CreateWindow(
        _T("MAIN"),//窗口类名
        _T("WinHello"),//窗口标题
        WS_OVERLAPPEDWINDOW,//窗口风格
        CW_USEDEFAULT,//窗口左上角水平坐标
        CW_USEDEFAULT,//窗口左上角垂直坐标
        CW_USEDEFAULT,//窗口宽度
        CW_USEDEFAULT,//窗口高度
        NULL,//父窗口句柄
        NULL,//菜单句柄
        hInstance,//应用,程序实例句柄
        NULL//额外数据
        );
    if (!hWnd)
    {
        return FALSE;
    }

    //显示窗口
    ShowWindow(hWnd, nCmdShow);

    //刷新窗口
    UpdateWindow(hWnd);
    return TRUE;

}

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPWSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    //注册窗口类
    if (!InitApplication(hInstance))
    {
        return 0;
    }
    //创建、显示并刷新窗口
    if (!InitInstance(hInstance, nCmdShow))
    {
        return 0;
    }
    //消息泵(消息循环)
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);//翻译消息(处理大小写锁、shift键 是否打开)
        DispatchMessage(&msg);//派发消息
    }
    return 0;



    return 0;
}

WinButton

#include "stdafx.h"

WNDPROC g_OldButtonProc = NULL;
LRESULT CALLBACK ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    //处理感兴趣的消息
    switch (uMsg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    //处理不感兴趣的窗口
    return CallWindowProc(g_OldButtonProc, hWnd, uMsg, wParam, lParam);
}
int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
    )
{
    //创建窗口
    HWND hWnd = CreateWindow(
        _T("BUTTON"),
        _T("Push Me!"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL
        );
    if (!hWnd)
        return 0;

    //对按钮窗口做子类化,即用自己定义的窗口过程函数取代预定义的窗口过程函数,同时获得预定于的窗口
    //过程函数指针
    g_OldButtonProc=(WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)ButtonProc);

    //显示窗口
    ShowWindow(hWnd, SW_SHOW);

    //刷新窗口
    UpdateWindow(hWnd);

    //消息循环
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);

    }



}

转载于:https://www.cnblogs.com/lhfen/p/5967261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值