zoukankan      html  css  js  c++  java
  • 我们的第二个程序

        上次,我们在第一个Windows程序中,弹出了一个对话框,对话框是Windows窗口中的一种,但是,这个对话框不是我们自己写的,而是微软写的,并将它封装在Usr32.dll中,供我们使用,相信,很多人在想,如何自己写一个窗口吧,今天,我会让你们如愿以偿,我们今天的目标就是一起写一个windows窗口,虽然这个窗口非常简单,但是,它却描述了创建一个窗口需要的所有东西。具体如例1所示。

    例1 我们的第2个程序

    /* ************************************
    *《Windows程序设计快速入门》
    * 我们的第2个程序
    **************************************/
    
    /* 预处理 */
    /* 头文件 */
    #include <windows.h>
    
    /* 全局变量 */
    HINSTANCE hinst;
    
    /* 函数声明 */
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
    
    /* ************************************
    * 功能:显示一个窗口
    **************************************/
    int WINAPI WinMain(HINSTANCE hinstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
    {
        WNDCLASSEX wcx;         // 窗口类
        HWND hwnd;              //  窗口句柄     
        MSG msg;                // 消息
        BOOL fGotMessage;       // 是否成功获取消息
        hinst = hinstance;      // 应用程序实例句柄,保存为全局变量
    
        // 填充窗口类的数据结构
        wcx.cbSize = sizeof(wcx);          // 结构体的大小
        wcx.style = CS_HREDRAW |
            CS_VREDRAW;                    // 样式:大小改变时重绘界面
        wcx.lpfnWndProc = MainWndProc;     // 窗口消息处理函数
        wcx.cbClsExtra = 0;                // 不使用类内存
        wcx.cbWndExtra = 0;                // 不使用窗口内存
        wcx.hInstance = hinstance;         // 所属的应用程序实例句柄
        wcx.hIcon = LoadIcon(NULL,
            IDI_APPLICATION);              // 图标:默认
        wcx.hCursor = LoadCursor(NULL,
            IDC_ARROW);                    // 光标:默认
        wcx.hbrBackground = (HBRUSH)GetStockObject(
            WHITE_BRUSH);                  // 背景:白色
        wcx.lpszMenuName = NULL;          // 菜单:不使用
        wcx.lpszClassName = "MainWClass";  // 窗口类名
        wcx.hIconSm = (HICON)LoadImage(hinstance, // 小图标
            MAKEINTRESOURCE(5),
            IMAGE_ICON,
            GetSystemMetrics(SM_CXSMICON),
            GetSystemMetrics(SM_CYSMICON),
            LR_DEFAULTCOLOR);
    
        // 注册窗口类
        if (!RegisterClassEx(&wcx))
        {
            return 1;
        }
    
        // 创建窗口
        hwnd = CreateWindow(
            "MainWClass",        // 窗口名
            "我们的第二个程序",            // 窗口标题
            WS_OVERLAPPEDWINDOW, // 窗口样式  
            CW_USEDEFAULT,       // 水平位置X:默认
            CW_USEDEFAULT,       // 垂直位置Y:默认
            CW_USEDEFAULT,       // 宽度:默认
            CW_USEDEFAULT,       // 高度:默认
            (HWND)NULL,         // 父窗口:无
            (HMENU)NULL,        // 菜单:使用窗口类的菜单
            hinstance,           // 应用程序实例句柄
            (LPVOID)NULL);      // 窗口创建时数据:无
    
        if (!hwnd)
        {
            return 1;
        }
    
        // 显示窗口
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        // 消息循环
        while (
            (fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0)) != 0
            && fGotMessage != -1)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    
    }
    
    /* ************************************
    * MainWndProc
    * 功能:窗口消息处理函数,对所有的消息都使用默认处理函数
    **************************************/
    LRESULT CALLBACK MainWndProc(HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
        )
    {
        switch (uMsg)
        {
        case WM_DESTROY:
            ExitThread(0);
            return 0;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    
    }
    运行效果如图1所示:

    图1 运行效果

        程序的运行效果如图1所示,虽然非常简单,但是却可以帮助我们建立信心,希望大家回去实践一下,下次课程,我们主要讲解这个程序的流程。

  • 相关阅读:
    Java之JVM调优案例分析与实战(4)
    Qt浅谈之四十九俄罗斯方块(代码来自网络)
    自作聪明的开发
    Visual Studio 连接 SQL Server 的connectionStringz和
    删除反复行SQL举例
    一起学android之怎样设置TextView中不同字段的字体颜色(22)
    A008-drawable资源
    android 自己定义组件随着手指自己主动画圆
    一个简单的HTML5摇一摇实例
    关于事件的传递机制。
  • 原文地址:https://www.cnblogs.com/new0801/p/6176940.html
Copyright © 2011-2022 走看看