当前位置: 首页 > news >正文

做电影方面的网站怎么做酒店网站模板下载

做电影方面的网站怎么做,酒店网站模板下载,网站建设-搜遇网络,高端定制网站开发建站教程详解第五章已经讲到#xff0c;Windows只会把键盘消息发送到当前具有输入焦点的窗口。鼠标消息则不同#xff1a;当鼠标经过窗口或在窗口内被单击#xff0c;则即使该窗口是非活动窗口或不带输入焦点#xff0c; 窗口过程还是会收到鼠标消息。Windows定义了 21种鼠标消息。不过…第五章已经讲到Windows只会把键盘消息发送到当前具有输入焦点的窗口。鼠标消息则不同当鼠标经过窗口或在窗口内被单击则即使该窗口是非活动窗口或不带输入焦点 窗口过程还是会收到鼠标消息。Windows定义了 21种鼠标消息。不过其中11种消息与 客户区无关称为“非客户区消息”。Windows应用程序经常忽略这类消息。 本节必须掌握的知识点 客户区鼠标消息 第35练客户区鼠标消息的处理 6.2.1 客户区鼠标消息 ■客户区鼠标消息 当鼠标移经窗口客户区时窗口过程接收WM_MOUSEMOVE消息。在窗口客户区内按下或释放鼠标按钮时窗口过程接收如下表所示的消息 按钮 按下 释放 第二次按下按钮 左键 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK 中键 WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK 右键 WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK 窗口过程只对三键鼠标接收MBUTTON消息只对双键鼠标接收RBUTTON消息。而只有当窗口类被定义成接收鼠标双击时窗口过程才接收DBLCLK双击消息。 对所有这些消息来说参数IParam包含了鼠标的位置信息其中低位字表示x坐标 高位字表示y坐标它们都是相对于窗口客户区左上角的相对坐标。利用LOWORD宏和 HIWORD宏可以获取这些坐标值 X LOWORD (IParam); y HIWORD (IParam); 参数wParam表示鼠标按钮、Shift键和Ctrl键的状态。可以利用WINUSER.H头文件中定义的位掩码来测试参数wParam。前缀MK代表“鼠标键”mouse key)。 MK_LBUTTON       按下左键 MK_MBUTTON      按下中键 MK_RBUTTON       按下右键 MK_SHIFT             按下 Shift 键 MK_CONTROL      按下 Ctrl 键 例如当接收到WM_LBUTTONDOWN消息时若wparam MK_SHIFT 的值为TRUE非零则表示按下鼠标左键的同时按下了 Shift键。 ●处理Shift键 处理过程依赖Shift和Ctrl键的逻辑处理 单键鼠标模拟双键鼠标 if (wParam MK_SHIFT)  //按下Shift {     if (wParam MK_CONTROL)     {         [按下Shift Ctrl键];      }     else{         [只按下Shift键];     } }else{                  //未按Shift     if (wParam MK_CONTROL)     {         [只按下Ctrl键];     }else{         [Shift和Ctrl都没被按下];     } } case WM_LBUTTONDOWN: //未按Shift时直接处理左键     if (!(wParam MK_SHIFT))     {         [这里处理左键];         return 0;      }   //注意这里没有return。     //用户按下了鼠标左键Shift执行以下代码模拟右键。 case WM_RBUTTONDOWN:      [这里处理右键];     return 0; 【注意】双键鼠标也是可以正常处理的。单键鼠标可以通过按住鼠标左键Shift来模拟鼠标右键的功能。 【注意】GetKeyState可以通过VK_LBUTTON、VK_RBUTTON、VK_SHIFT、VK_CONTROL等获取鼠标当前状态。但鼠标或键盘未被按下的键不能使用GetKeyState。只有被按下时才会报告其按下状态。while(GetKeyState(VK_LBUTTON)0)是错误的代码。 ●鼠标移经窗口的客户区时Windows系统不会为鼠标经过的每个像素位置都产生 WM_MOUSEMOVE消息。程序收到的WM_MOUSEMOVE消息个数取决于鼠标硬件和窗口过程处理鼠标移动消息的速度。换言之如果消息队列里还有未处理的 WM_MOUSEMOVE消息Windows就不会重复向消息队列中添加该消息。试验下面这个 CONNECT程序可以对WM_MOUSEMOVE消息的产生速度有一个全面的了解。 ●若在非活动窗口的客户区内按下鼠标左键Windows会将该窗口变为活动窗口并向窗口过程发送WM_LBUTTONDOWN消息。当窗口过程接收到WM_LBUTTONDOWN消息时程序就能够安全地保证该窗口是活动窗口。但是在事先没有接收 WM_LBUTTONDOWN消息的情况下窗口过程仍然可以接收WM_LBUTTONUP消息。 比如当用户在其他窗口内按下鼠标再移动到用户窗口然后释此时就会发生这种情况。类似地当移动鼠标到另一个窗口再释放时前一个窗口过程在接收 WM_LBUTTONDOWN消息后就接收不到相应的WM_LBUTTONUP消息。 ■前面这些规则有两个例外 ●即使鼠标位于窗口的客户区之外窗口过程也有办法“捕获鼠标”并且继续接收鼠标消息。本章会在后面讲述如何捕获鼠标。 ●若正在显示一个系统模式消息框或系统模式对话框则其他任何程序都不能接收鼠标消息。当系统模式消息框或对话框处于活动状态时它们会阻止系统切换到另一个窗口。例如关闭Windows时弹出的消息框就是一个系统模式消息框。 6.2.2 第35练客户区鼠标消息的处理 /*--------------------------------------------------------------- 035  WIN32 API 每日一练 第35个例子CONNECT.C客户区鼠标消息的处理 SetPixel函数 SetCursor函数 ShowCursor函数 WM_LBUTTONDOWNE消息 WM_MOUSEMOVE消息 WM_LBUTTONUP消息 (c) www.bcdaren.com, 2020 ----------------------------------------------------------------*/ #include windows.h #define MAXPOINTS 1000 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] TEXT(Connect); …(略) return msg.wParam; } LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam) { static POINT pt[MAXPOINTS];//鼠标经过窗口区像素点坐标数组 static int iCount; HDC hdc; int i,j; PAINTSTRUCT ps; switch (message) { /*测试非客户区消息 //用于通知应用程序在非客户区Non-Client Area //接收到鼠标消息时进行的命中测试Hit Test。 case WM_NCHITTEST: //直接返回位置信息阻止系统向所有窗口客户区和非窗口客户区发送鼠标消息 return (LRESULT)HTNOWHERE; //测试按下ALTF、CtrlC等系统消息 case WM_SYSKEYDOWN: //直接返回使所有系统键盘消息失效 return 0;*/ //按下鼠标左键消息 case WM_LBUTTONDOWN:     iCount 0; InvalidateRect(hwnd,NULL,TRUE);//重绘窗口---清除背景 return 0; //鼠标移动消息 case WM_MOUSEMOVE:   //按下鼠标左键并且iCount小于1000 if (wParam MK_LBUTTON iCount 1000) { //填充坐标数组 pt[iCount].x LOWORD(lParam); pt[iCount].y HIWORD(lParam); hdc GetDC(hwnd); //设置像素点颜色RGB(0)黑色 SetPixel(hdc,LOWORD(lParam),HIWORD(lParam),0); ReleaseDC(hwnd,hdc); } return 0; //松开鼠标左键消息 case WM_LBUTTONUP:  //重新绘制窗口---不清除背景保留WM_MOUSEMOVE里画下的点。 InvalidateRect(hwnd,NULL,FALSE); return 0; case WM_PAINT: hdc BeginPaint(hwnd,ps); SetCursor(LoadCursor(NULL,IDC_WAIT));//设置鼠标形状为等待状态 ShowCursor(TRUE);//显示鼠标 //像素点之间画线 for (i 0;i iCount - 1;i) { for (j 0;j iCount - 1;j) { MoveToEx(hdc,pt[i].x,pt[i].y,NULL); LineTo(hdc,pt[j].x,pt[j].y); } } ShowCursor(FALSE);//隐藏鼠标 SetCursor(LoadCursor(NULL,IDC_ARROW));//设置鼠标位图“箭头形状” EndPaint(hwnd,ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); } /*************************************************************************** SetPixel函数指定坐标到指定的颜色设置像素 COLORREF SetPixel( HDC      hdc, int      x,  //坐标 int      y, COLORREF color    //RGB颜色 ); *************************************************************************** SetCursor函数设置鼠标形状 HCURSOR SetCursor( HCURSOR hCursor   //IDC_ARROWIDC_WAIT ); ShowCursor函数显示/隐藏鼠标 int ShowCursor( BOOL bShow   //TRUE显示FALSE隐藏 ); *************************************************************************** WM_LBUTTONDOWNE消息:当光标在窗口的客户区域中时用户按下鼠标左键时发布。 如果未捕获鼠标则消息将发布到光标下方的窗口。否则该消息将发布到捕获鼠标的窗口中。 参数wParam指示各种虚拟键是否按下。此参数可以是以下一个或多个值。 MK_CONTROL  0x0008  CTRL键按下。 MK_LBUTTON  0x0001  鼠标左键按下。 MK_MBUTTON  0x0010  鼠标中键按下。 MK_RBUTTON  0x0002  鼠标右键按下。 MK_SHIFT    0x0004  SHIFT键按下。 MK_XBUTTON1 0x0020  第一个X按钮按下。 MK_XBUTTON2 0x0040  第二个X按钮按下。 lParam 低位字指定光标的x坐标。坐标相对于客户区域的左上角。 高阶字指定光标的y坐标。坐标相对于客户区域的左上角。 返回值 如果应用程序处理此消息则应返回零。 *************************************************************************** WM_MOUSEMOVE消息:光标移动时张贴到窗口。如果未捕获鼠标则消息将发布到包含光标的窗口中。否则该消息将发布到捕获鼠标的窗口中。 参数与WM_LBUTTONDOWNE消息相同 *************************************************************************** WM_LBUTTONUP消息:当光标在窗口的客户区域中时用户释放鼠标左键时发布。 如果未捕获鼠标则消息将发布到光标下方的窗口。否则该消息将发布到捕获鼠标的窗口中。 参数与WM_LBUTTONDOWNE消息相同 */ 运行结果 图6-1 客户区鼠标消息 总结 ●实例操作方法 1第一种——在客户区按下左键略微移动再松开左键。 2第二种——在客户区按下左键快速移动鼠标。 ●己知的问题在客户区外释放左键Connnect不会连接这些点因为没收到WM_LBUTTONUP消息。 ●该程序较耗时绘制时鼠标变沙漏形处理WM_PAINT完后回原来的状态。用SetCursor来切换鼠标。ShowCursor隐藏或显示鼠标指针。 ●窗口过程 1实例CONNECT.C处理了三个鼠标消息。 WM_LBUTTONDOWNE消息按下鼠标左键时调用InvalidateRect函数清除背景重绘窗口。 WM_MOUSEMOVE消息移动鼠标时采集不超过1000个鼠标移动坐标点保存在pt数组中然后使用SetPixel函数绘制坐标点系统默认黑色画笔。 WM_LBUTTONUP消息松开鼠标左键时重绘窗口但是并不清除背景。 2处理WM_PAINT消息时CONNECT程序需要耗费一定的时间来绘制直线因此鼠标指针会变成等待位图。调用SetCursor函数加载并设置鼠标位图为等待位图显示鼠标位图。接着使用双循环将所有坐标点连接起来。然后再恢复原鼠标位图。 3在用户释放左键时如果鼠标指针已经移出客户区CONNECT程序就不会连接这些点 因为程序没有接收到WM_LBUTTONUP消息。此时如果再将鼠标移入客户区并按下左键CONNECT程序就会清空客户区。如果想在客户区外释放鼠标并继续设计图形就可以在客户区外按下鼠标的左键再将鼠标移入客户区。 4动手实验处理WM_NCHITTEST消息时可以直接返回鼠标位置信息阻止系统向所有窗口客户区和非窗口客户区发送鼠标消息。 处理WM_SYSKEYDOWN消息时可以让所有系统键盘消息失效。 下一节我们讲述如何在非窗口客户区捕捉鼠标消息。
http://www.dnsts.com.cn/news/76988.html

相关文章:

  • 佘山网站建设免费印章在线制作
  • 工控网做网站维护吗html5 wordpress模板
  • iis 无法启动此网站公司做网站需要提供什么条件
  • 北京网站建设认知网站建设类外文翻译
  • 企业怎么做网站推广怎样建立个人的网站
  • 加强文明网站建设线上推广渠道有哪些方式
  • 网站底部背景博客建站系统
  • 个人网站模板 html5wordpress生成tags页面
  • 网站开发制作公司有哪些电子商务是什么职业
  • 金融网站欣赏青海省公路建设网站
  • 海口网站制作公司一个网站3个相似域名
  • 上海奉贤 网站建设花儿直播免费视频观看
  • 购物网站功能报价手机网站被做跳转
  • 房产中介网站源码wordpress 个人简介栏
  • 网站建设 客户需求windows优化大师和360哪个好
  • 网站页面构成贵州省住房和城乡建设厅官方网站首页
  • 网站如何跳转php完整网站开发案例
  • 北京注册公司要求免费seo网站推荐一下软件
  • 给网站做图南宁市西乡塘区建设局网站
  • 哈尔滨网站建设王道下拉強wap网站开发实例
  • 站长做什么网站赚钱传承网页设计公司
  • 定制礼品的网站有哪些wordpress继续阅读插件
  • 网络建站怎么做网站建设新方式简单省时
  • 网站建设项目外包网站页面布局设计
  • 网站建设思维导图国外设计师灵感网站
  • 常用的网站推广方法有哪些本地网站后台管理建设
  • 全能网站建设完全自学手册百度百科词条创建入口
  • 海外网站怎么浏览长沙网站建站模板
  • 网站开发什么语音最好led灯网站模板
  • 打车网站开发中国互联网协会理事长级别