• 10 Windows编程——鼠标消息


    和鼠标相关的三个属于:click,double-click,drag

    鼠标消息和键盘消息不同:只要鼠标跨越某个窗口,或者在某个窗口中按键,消息。

    客户去鼠标消息

    WM_MOUSEMOVE

    WM_[L,M,R] BUTTONDOWN

    WM_[L,M,R] BUTTONUP

    WM_[L,M,R] BUTTONDBLCLK

    对于这些消息,lParam的低字节为x坐标,高字节为y坐标。
    wParam只是鼠标按键以及shift和Ctr1按键的状态(这个和键盘消息相似)。
    要测试鼠标按钮是否按下:MK_LBUTTON,MK_MBUTTON,MK_RBUTTON,MK_SHIFT,MK_CONTROL.

    非客户区鼠标消息:
    WM_NCMOUS EMOVE
    WM_NCLBUTTONDOWN.
    WM_NCLBUTTONUP
    WM_NCLBUTTONDBLCLK

     1 #include<Windows.h>
     2 #include<WinUser.h>
     3 #include<tchar.h>
     4 #include<stdio.h>
     5 
     6 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
     7 
     8 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
     9 {
    10     WNDCLASS WndClass;
    11     TCHAR* ClassName = TEXT("MyClass");
    12     HWND hwnd;
    13     MSG msg;
    14 
    15     WndClass.cbClsExtra = 0;
    16     WndClass.cbWndExtra = 0;
    17     WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    18     WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    19     WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    20     WndClass.hInstance = hInst;
    21     WndClass.lpfnWndProc = WindProc;
    22     WndClass.lpszClassName = ClassName;
    23     WndClass.lpszMenuName = NULL;
    24     WndClass.style = CS_VREDRAW | CS_HREDRAW;
    25 
    26     RegisterClass(&WndClass);
    27     hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL);
    28     ShowWindow(hwnd, nShow);
    29     UpdateWindow(hwnd);
    30 
    31     while (GetMessage(&msg, NULL, 0, 0))
    32     {
    33         TranslateMessage(&msg);
    34         DispatchMessage(&msg);
    35     }
    36     return 0;
    37 }
    38 
    39 
    40 
    41 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    42 {
    43     HDC hdc;
    44     PAINTSTRUCT pt;
    45     TCHAR *rectwords = TEXT("我在学习鼠标消息");
    46     static int i;
    47     switch (message)
    48     {
    49     case WM_CREATE:
    50         return 0;
    51     case WM_SIZE:
    52         return 0;
    53     case WM_PAINT:
    54         hdc = BeginPaint(hwnd, &pt);
    55         Rectangle(hdc, 10, 10, 100, 100);
    56         if (i)
    57         {
    58             TextOut(hdc, 100, 10, rectwords, _tcslen(rectwords));
    59         }
    60         EndPaint(hwnd, &pt);
    61         return 0;
    62     case WM_CHAR:
    63         return 0;
    64     case WM_LBUTTONUP:
    65         i = 0;
    66         InvalidateRect(hwnd, NULL, TRUE);
    67         return 0;
    68     case WM_LBUTTONDOWN:
    69         InvalidateRect(hwnd, NULL, TRUE);
    70         if (LOWORD(lParam)>10 && LOWORD(lParam)<100 && HIWORD(lParam)>10 && HIWORD(lParam)<100)
    71         {
    72             i = 1;
    73         }
    74         return 0;
    75     case WM_MOUSEMOVE:
    76         hdc = GetDC(hwnd);
    77         if (wParam&MK_LBUTTON)
    78         {
    79             SetPixel(hdc, LOWORD(lParam), HIWORD(lParam), 0);
    80         }
    81         ReleaseDC(hwnd, hdc);
    82         return 0;
    83     case WM_DESTROY:
    84         PostQuitMessage(0);
    85         return 0;
    86     default:
    87         break;
    88     }
    89 
    90     return DefWindowProc(hwnd, message, wParam, lParam);
    91 }
    View Code
  • 相关阅读:
    谈谈严格模式
    javascript回调函数那些事~
    border-radius:50%和100%究竟有什么区别
    canvas浅谈 实现简单的自旋转下落
    js中关于this的理解
    对js 面对对象编程的一些简单的理解
    ios中 input 焦点光标不垂直居中
    只能输入数字的正则表达式在火狐的兼容问题解决方法
    关于margin、padding 对内联元素的影响
    element ui 表格的合并
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9322262.html
Copyright © 2020-2023  润新知