windows 消息机制

windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步
用户动作也就是事件 ->windows 将事件翻译成消息->将消息放入消息队列
->消息循环从消息队列中取出消息并发送给窗口处理程序
我们来看一下窗口最简单窗口的过程
创建一个窗口必须先注册这个窗口的窗口类RegisterClass(&wndclass);
每一个窗口程序都有一个类名和标题名是不变
这里引入一个新的概念叫窗口句柄 HWND
在Windows程序设计里窗口句柄的概念非常重要#include<Windows.h>
LRESULT CALLBACK WndProc( //回调函数声明 也即是窗口处理程序 这个是每一个
//程序都有一个的
HWND hWnd,
UINT uMsg,
WPARAM wParam,LPARAM lParam
);
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevlnstance, LPSTR szCmdLine, int iCmdShow)
{
WNDCLASS wndclass;//定义一个窗口类 这个结构里有十个成员 这十个成员里有三个成员至关重要
HWND hwnd;//窗口句柄
MSG msg; //消息结构
wndclass.cbWndExtra = 0;
wndclass.cbClsExtra = 0;
wndclass.hInstance = hinstance;
wndclass.lpszClassName = “taolaoda”;//窗口类名
wndclass.lpszMenuName = “陶流佳”;//窗口标题名字
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.lpfnWndProc = WndProc;//这个成员至关重要
//这段代码将这个窗口的窗口处理程序绑定为WndProc

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
RegisterClass(&wndclass); //注册一个窗口类
hwnd = CreateWindow(“taolaoda”, “陶流佳”, WS_OVERLAPPEDWINDOW, 400, 400, 400, 400, NULL, NULL, hinstance, NULL);
// CreateWindow这个函数用于创建一个窗口记住第一个参数为窗口类名 必须和上面赋值的一样 ,第二个参数为窗口的标题 这个该不该到是无所谓其他参数可以自己了解下 该函数为返回值为窗口的句柄
*ShowWindow(hwnd, iCmdShow);//显示窗口
UpdateWindow(hwnd);//刷新拆个窗口 窗口创建之后并不会马上显示在这里两个函数执行完窗口才能显示出来

  • //这一段个每一个应用程序都有的一段 消息循环 GetMessage这个函数用于从消息队列获取消息 并保存在 //消息结构中 这样把我在后面把MSG消息结构给大家解释一下学者能更好的理解消息机
    **while (GetMessage(&msg, hwnd, 0, 0))//
    {
    TranslateMessage(&msg);//翻译消息
    DispatchMessage(&msg);将消息发送给WndProc
    }
    return 0;
    }
    //GetMeessage 这个函数是阻塞函数 消息队列有消息则获取 无则等待
    还有个函数叫PeekMessaeg 这个函数与GetMessaeg函数功能相识 这个函数是非阻塞的
    LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )//回调函数声明
    {
    switch (uMsg)
    {
    case WM_CREATE: //这个消息在窗口创建以后显示之前产生的消息
    break;
    case WM_DESTROY://当获取到这个消息程序结束
    PostQuitMessage(0);
    return 0;
    default:
    break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

//当然在这个窗口回调函数中还有很多消息 就需要你们往学了 慢慢的完善
这个创建的窗口只是一个最基本的窗口 比如WM_PAINT 窗口重绘消息
在窗口大小发送改变时发送的消息 鼠标消息阿 键盘消息阿等等

typedef struct tagMSG {
HWND hwnd; //窗口句柄 该消息属于哪个窗口
UINT message; //消息id
WPARAM wParam; //wParam lParam 窗口附加消息
LPARAM lParam;
DWORD time; // 事件产生的时间
POINT pt; //消息的坐标(产生事件鼠标的坐标) POINT 也是一个//结构
}MSG;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值