我们的第二个程序

    上次,我们在第一个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所示,虽然非常简单,但是却可以帮助我们建立信心,希望大家回去实践一下,下次课程,我们主要讲解这个程序的流程。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值