els_ 画矩形、代码规划和备份

本文介绍了如何使用Windows API在C++中创建一个带有自定义光标和状态栏图标的窗口,重点展示了WNDCLASSEX结构的设置和WM_CREATE、WM_PAINT消息的处理。

1、主函数

#include<Windows.h>
#include"resource.h"
#include"els_h.h"
LRESULT CALLBACK PELouSi(HWND hWnd, UINT oMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR ipCmdLine,int nCmdShow)
{
    //初始化窗口类。
    WNDCLASSEX  db;
    HWND hWnd;
    MSG msg;//结构体变量。

    db.cbClsExtra = 0;
    db.cbSize = sizeof(WNDCLASSEX);
    db.cbWndExtra = 0;

    db.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景颜色。
    
    //返回值:鼠标的句柄。
    // 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
    //db.hCursor = LoadCursor(NULL,IDC_HAND);//加载系统定义的光标。
    db.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE (IDC_NODROP));//自定义的光标。资源文件->添加->资源->Cursor->IDC_NODROP->新建。
    
    //返回值:图标的句柄。
    // 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
    //db.hIcon = LoadIcon(NULL,IDI_ASTERISK);//加载系统定义的光标。
    db.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));//状态栏图标。
    
    //db.hIconSm = NULL;//左上角图标为此定义。如果为空则默认为状态栏图标。
    db.hIconSm = LoadIcon(NULL,IDI_HAND);
    db.hInstance = hInstance;
    db.lpfnWndProc = PELouSi;//回调函数名。
    db.lpszClassName = "els";
    db.lpszMenuName = NULL;
    db.style = CS_HREDRAW | CS_VREDRAW;

    if(0==RegisterClassEx(&db))
    {
        int a = GetLastError();
        return 0;
    }

    //创建窗口。hWnd窗口句柄 失败返回NULL。 
    //窗口风格:参数4。
    hWnd=CreateWindowEx(WS_EX_TOPMOST,"els","els方块",WS_OVERLAPPEDWINDOW,100,100,600,600,NULL,NULL,hInstance,NULL);

    if (NULL == hWnd)//窗口句柄。 窗口的唯一标识。
    {

        return 0;
    }

    //显示窗口
    ShowWindow(hWnd, nCmdShow);
    
    //消息循环。队列。
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
    //回调函数
    //返回值:LRESULT,CALLBACK调用约定。
    //参数1:窗口句柄;参数2:消息ID。
LRESULT CALLBACK PELouSi(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)// LRESULT:long类型;UINT:无符号整型,消息的ID。
{
    PAINTSTRUCT pt;//定义结构体。
    HDC hDc;
    //关闭窗口消息
    switch (nMsg)
    {
    case WM_CREATE://窗口信息处理程序接受的第一个消息,也是回调函数处理的第一个消息(为WM_CREATE)。此消息只产生一次,一般是用于初始化一些数据。
        //GetLastError();//优化。
        Oncreate();//游戏数据初始化。
        break;

    //是回调函数处理的第二个消息(为WM_PAINT)。
    //当窗口显示区域的一部分显示内容或者全部变为(无效),以致于必须(更新画面)时,将由这个消息通知程序。
    //窗口结构的最后的那个成员CS_HREDRAW|CS_VREDRAW,目的就是窗口大小发生变化的时候,产生WM_PAINT消息。
    //窗口重叠时,重叠部分渐渐出现时。
    case WM_PAINT:
        //GetLastError();//优化。
        hDc=BeginPaint(hWnd,&pt);//getDC,窗口可操作区域的标识。
        //在此之间画窗口的内容。
        //画方块。
        OnPaint(hDc);//增加代码可读性。
 
       
        EndPaint(hWnd, &pt);//结束。
        break;
    case WM_DESTROY:
            PostQuitMessage(0);//调用PostQuitMessage(0)这个函数发出WM_QUIT消息。//点叉系统依次产生WM_CLOSE,WM_DESTROY,WM_QUIT。
            break;
        
    }//手动处理点叉关闭消息。

    return DefWindowProc(hWnd, nMsg, wParam, lParam);
    //LRESULT a=DefWindowProc(hWnd, oMsg, wParam, lParam);//功能
    //return a;
}
2、头文件。

#ifndef N_d
#define N_d

#include<Windows.h>
void OnPaint(HDC hDc);
void Oncreate();

#endif

3、函数实现。

#include"els_h.h"
void OnPaint(HDC hDc)
{
    Rectangle(hDc, 0, 0, 300, 600);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
    Rectangle(hDc, 30, 30, 60, 60);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
}
void Oncreate()
{

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

clown_30

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

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

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

打赏作者

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

抵扣说明:

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

余额充值