通过WinMain函数创建窗口

//WinMain 程序
#include <windows.h>
#include <stdio.h>

/**********************************************
 *    窗口过程函数的声明
 *    WinSunProc 是函数名 可以随便起 但要有意义
 **********************************************/

LRESULT CALLBACK WinSunProc(
   HWND hwnd,     // 窗口句柄
   UINT uMsg,     // 消息代码
   WPARAM wParam, // 消息代码的两个附加参数
   LPARAM lparam
   );

/***********************************************
     WinMain 函数  主函数、入口函数
     LP long point 长指针
     窗口的创建过程:
                1.设计一个窗口类
                2.注册窗口类
                3.创建窗口
                4.显示及更新窗口
***********************************************/

int WINAPI WinMain(
   HINSTANCE hInstance,       // 当前运行的实例句柄
   HINSTANCE hPrevInstance,   // 当前实例的前一个实例句柄
   LPSTR lpCmdLine,           // 以空终止的字符串
   int nCmdShow               // 窗口显示 最大/小化 隐藏   
)
{
    // 设计一个窗口类
    WNDCLASS wndcls;          // WNDCLASS 是一个结构体 包含窗口的各项特征
    wndcls.cbClsExtra = 0;
    wndcls.cbWndExtra = 0;
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   // 背景画刷句柄
    wndcls.hCursor = LoadCursor(NULL , IDC_CROSS);                // 光标句柄
    wndcls.hIcon = LoadIcon(NULL , IDI_ERROR);                    // 图标句柄
    wndcls.hInstance = hInstance;                                 // 实例句柄
    wndcls.lpfnWndProc = WinSunProc;                              // 指针函数 指向窗口过程函数
    wndcls.lpszClassName = "xiaobei2017";                         // 窗口类的名字
    wndcls.lpszMenuName = NULL;                                   // 菜单资源的名字
    wndcls.style = CS_HREDRAW | CS_VREDRAW;                       // style指的窗口的样式

    // 注册窗口类 
    RegisterClass(&wndcls);

    // 创建窗口
            /* CreateWindow函数用来创建窗口
             * 第一个参数是窗口类的名字 跟上面要对应
             * 第二个参数是窗口的名字
             * 第三个参数是窗口的类型
             * 第四五个参数是窗口左上角的坐标
             * 第六七个参数是窗口的长和宽
             * 第八个是副窗口句柄 只有一个窗口就设置成NULL
             * 第九个是菜单句柄 没有菜单就设置成NULL
             * 第十个是实例句柄 hInstance
             * 第十一个参数暂时用不上 后面再介绍
             */
    HWND hwnd;
    hwnd = CreateWindow("xiaobei2017","翼佳奕",
            WS_OVERLAPPEDWINDOW,200,200,600,400,NULL,NULL,hInstance,NULL);

    // 显示及刷新窗口
            /* ShowWindow函数是用来显示窗口
             * 第一个参数是窗口句柄
             * 第二个参数是窗口的显示状态SW_SHOWNORMAL是激活窗口并显示
             */
    ShowWindow(hwnd , SW_SHOWNORMAL);
    UpdateWindow (hwnd); // 更新窗口 参数是窗口句柄 (可有可无)

    // 定义消息结构体 ,开始消息循环
        // 消息循环就是不断地从消息队列中取出信息并响应
            /* GetMessage函数就是从消息队列中取出信息
             * 第一个参数是指向消息结构体
             * 第二个参数指定接收哪个窗口的消息 通常默认为NULL
             * 第三四个参数是获取消息的最小值和最大值 通常为0 接收所有消息
             */
        // TranslateMessage 函数是将虚拟键消息转换为字符消息
        // DispatchMessage  是将消息回传给操作系统
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);

    }
    return msg.wParam;
}

/**********************************************
 *    窗口过程函数
 *    WinSunProc 是函数名 可以随便起 但要有意义
 **********************************************/


    LRESULT CALLBACK WinSunProc(
       HWND hwnd,     // 窗口句柄
       UINT uMsg,     // 消息代码
       WPARAM wParam, // 消息代码的两个附加参数
       LPARAM lparam
       )
    {
        switch(uMsg)
        {
        case WM_CHAR:  // WM_CHAR
            char szChar[20];
            sprintf(szChar,"输入的字符是%d",wParam);
            MessageBox(hwnd,szChar,"char",0);
            break;
                /* MessageBox 函数是用来弹出消息框
                 * 第一个参数是当前窗口的窗口句柄
                 * 第二个参数是消息显示的文本
                 * 第三个参数是消息框的标题
                 * 第四个参数是消息框的类型 0代表MB_OK 就是按键
                 */
        case WM_LBUTTONDOWN://鼠标左键按下的标志
            MessageBox(hwnd,"mouse clicked","message",0);
            HDC hdc;
            hdc = GetDC(hwnd);
            TextOut(hdc,0,30,"科技大学",strlen("科技大学"));
            ReleaseDC(hwnd,hdc);
            break;
        case WM_PAINT:  //窗口重绘
            HDC hDc;
            PAINTSTRUCT ps;
            hDc = BeginPaint(hwnd,&ps);
            TextOut(hDc,0,0,"机械工程学院",strlen("机械工程学院"));
            EndPaint(hwnd,&ps);
            break;
        case WM_CLOSE: // 窗口关闭
            if (IDYES == MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
            {
                DestroyWindow(hwnd);   // 销毁一个窗口
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd,uMsg,wParam,lparam);  
        }
        return 0;


    }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangxiaobei2017

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

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

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

打赏作者

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

抵扣说明:

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

余额充值