• Windows编程学习笔记(七)


    第五章 鼠标

    学习了主要的鼠标消息及控制,lParam wParam 字段的了解。

    /**********************************************************/

    Windows程序可以使用语句 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW)来载入光标。

    Windows只把键盘消息发送给具有输入焦点的窗口,而鼠标则是只要跨越窗口或者在某窗口中按下鼠标键,那么那个窗口处理消息程序就会受到鼠标消息,

    /**************************************************************/

    显示区域鼠标消息

       当鼠标移过窗口的显示区域时,窗口消息处理函数会收到WM_MOUSEMOVE消息,当鼠标在显示区域按下或释放一个鼠标按键时,窗口消息处理程序会收到WM_LBUTTONDOWN WM_RBUTTONDOWN WM_LBUTTONUP WM_RBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDBLCLK。

       对所有的这些消息,其中lParam含有鼠标的位置,低字组为x,高字组为y,可以这样提取xy值:

    x = LOWORD(lParam);

    y = HIWORD(lParam);

       而wParam的值指示鼠标按键以及Shitf Ctrl按键的状态,可以是用头文件中WINUSER.H中定义的屏蔽位来测试wParam,MK代表鼠标按键:

    ·MK_LBUTTON 左键

    ·MK_RBUTTON 右键

    ·MK_SHIFT 按下shift键

    ·MK_CONTROL 按下ctrl键

    例如,如果收到了WM_LBUTTONDOWN消息,而且值

    wparam & MK_SHIFT

    是TRUE(非0),您就知道当左键按下时也按下了Shift键。

    这样我们就可一编写一个简单的画图程序:当鼠标左键按下并拖动时,会在屏幕上沿鼠标轨迹绘出痕迹,每次检查鼠标若拖动且按左键,那么MoveToEx上一个xy坐标,LineTo现在的坐标,当鼠标左键释放时,复位以便重新划线,以下是部分代码:

           case WM_MOUSEMOVE:

                  if(wParam & MK_LBUTTON )

                  {

                         if(pre_lp == -1)

                                pre_lp = lParam;

                         hdc = GetDC(hWnd);

                         SelectObject(hdc,GetStockObject(BLACK_PEN));

                         MoveToEx(hdc,LOWORD(pre_lp),HIWORD(pre_lp),NULL);

                         LineTo(hdc,LOWORD(lParam),HIWORD(lParam));

                         pre_lp = lParam;

                         ReleaseDC(hWnd,hdc);

                  }

                  break;

           case WM_LBUTTONUP:

                  pre_lp = -1;

                  break;

    /************************************************************/

    非显示区域消息

    同显示区域消息一样,只不过是鼠标的坐标(0,0)点为屏幕左上角的(0,0)点,非显示区域鼠标消息几乎完全与显示区域鼠标消息相对应。消息中含有字母「NC」以表示是非显示区域消息。如果鼠标在窗口的非显示区域中移动,那么窗口消息处理程序会接收到WM_NCMOUSEMOVE消息。

    /*************************************************************/

    命中测试

        最后一个消息是WM_NCHITTEST, 此消息优先于所有其它的显示区域和非显示区域鼠标消息。lParam参数含有鼠标位置的x和y屏幕坐标,wParam参数没有用。

    Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其它鼠标消息。对于非显示区域鼠标消息,在处理WM_NCHITTEST时,从DefWindowProc传回的值将成为鼠标消息中的wParam参数,这个值可以是任意非显示区域鼠标消息的wParam值再加上以下内容:HTCLIENT HTNOWHERE HTTRANSPARENT HTERROR

  • 相关阅读:
    依赖注入
    ToDictionary() and ToList()
    Middleware详解
    仓储层的搭建
    Controller和View的交互
    Configuration配置信息管理
    开发工具
    60分钟Python快速学习(转)
    oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)
    ssh无密码登陆(转)
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662809.html
Copyright © 2020-2023  润新知