windows的消息机制

#include<Windows.h>
//WINAPI宏的作用,WINAPI代表__stdcall 参数的传递顺序,从右到左依次入栈,并且在函数返回前 清空堆栈
LRESULT CALLBACK WindowProc(
    HWND hwnd, //消息所属的窗口句柄
    UINT uMsg, ///具体消息名称,WM_xxx消息名
    WPARAM wParam,//键盘附加消息
    LPARAM lParam)//鼠标附加消息
{
    switch (uMsg){
    case WM_CLOSE:
        //所有以xxxwindow结尾的方法都不会进入消息队列,而是直接处理
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_LBUTTONDOWN://鼠标左键按下
    {
                            int xPos = LOWORD(lParam);
                            int yPos = HIWORD(lParam);
                            char buf[1024];
                            wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);
                            MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
                        
    }
        break;
    case WM_KEYDOWN:
        MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
        break;
    case WM_PAINT:
    { PAINTSTRUCT ps;
      HDC hdc = BeginPaint(hwnd, &ps);
      TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
      EndPaint(hwnd, &ps);
    }
        break;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain
(
    HINSTANCE hInstance,  //应用程序实例句柄
    HINSTANCE hPrevInstance,  //上一个应用程序句柄,win32程序中参数一般为NULL,一般不起作用
    LPSTR lpCmdLine,   //char *[]
    int nShowCmd    //显示命令,最大化,最小化,正常

{    //设计窗口,注册窗口,创建窗口,显示和更新,通过循环取消息,处理消息(窗口过程)
    WNDCLASS wc;
    wc.cbClsExtra = 0;//类的额外的内存
    wc.cbWndExtra = 0;//窗口的额外内存
    wc.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);//设置背景颜色
    wc.hCursor = LoadCursor(NULL,IDC_HAND );//设置光标
    wc.hIcon = LoadIcon(NULL, IDI_HAND);
    wc.hInstance = hInstance;
     wc.lpfnWndProc = WindowProc;
    wc.lpszClassName = TEXT("WIN");
    wc.lpszMenuName = NULL;
    wc.style = 0;//0代表默认风格
    RegisterClass(& wc);
    //lpClassName, lpWindowName, dwStyle, x, y, \nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam
    HWND hWnd = CreateWindow(wc.lpszClassName,TEXT("windows"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
    ShowWindow(hWnd, SW_SHOWNORMAL);
    //更新窗口
    UpdateWindow(hWnd);
    /*通过循环取消息
    HWND        hwnd;  主窗口句柄
    UINT        message;  具体消息名称
    WPARAM      wParam;   附加消息 键盘消息
    LPARAM      lParam;   附加消息 鼠标消息
    DWORD       time;  消息产生时间
    POINT       pt; 附加消息 鼠标消息点击的点的位置
    */
    MSG msg;
    /*
     _Out_ LPMSG lpMsg,  消息的名称
    _In_opt_ HWND hWnd,  NULL表示获取所有的窗口
    _In_ UINT wMsgFilterMin,  最小和最大的过滤消息,一般为0,一般为捕获所有的消息
    _In_ UINT wMsgFilterMax
    */
    while (1){
        if (GetMessage(&msg, NULL, 0, 0)== FALSE){
            break;
        }
        TranslateMessage(&msg);
        DispatchMessage( &msg);
    }
    //处理窗口的过程
    return 0;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值