设为首页 收藏本站
查看: 582|回复: 0

[经验分享] Windows核心编程(4)

[复制链接]

尚未签到

发表于 2018-6-15 10:49:39 | 显示全部楼层 |阅读模式
  一、窗口非客户区的鼠标消息
  1.WM_NCMOUSEMOVE  鼠标移动
  鼠标左键
  WM_NCLBUTTONDOWN 按下
  WM_NCLBUTTONUP  松开
  WM_NCLBUTTONDBLCLK 双击
  鼠标右键
  WM_NCRBUTTONDOWN 按下
  WM_NCRBUTTONUP  松开
  WM_NCRBUTTONDBLCLK 双击
  鼠标中键
  WN_NCMBUTTONDOWN 按下
  WM_NCMBUTTONUP 松开
  WM_NCMBUTTONDBLCLK 双击
  二.WM_NCHITTEST消息
  1.是操作系统发给鼠标下面的窗口,以便确定鼠标是在窗口的哪个部分
  上面,所有的窗口鼠标消息产生之前都是要先响应该消息,该消息由默认
  窗口消息处理程序处理,返回值提示鼠标所在区域
  HTCAPTION 在非客户区标题栏上
  HTCLIENT 客户区
  HTCLOSE 在关闭按钮上
  HTHELP 非客户区帮助按钮
  HTMAXBUTTON 最大化按钮
  HTMINBUTTON 最小化按钮
  HTTRANSPARENT 鼠标穿过窗口
  ...
  2.滚轮消息 WM_MOUSEWHEEL
  它表示鼠标被滚动的消息,这个消息不限于客户区,也不限于非客户区
  WPARAM参数 低16位表示哪个键被按下, 高16位表示滚动的距离
  正值表示向前滚动,负值向后滚动.
  LPARAM参数 低16客户区X坐标  高16位客户区Y坐标
  三.SetWindowPos函数
  1.改变窗口的位置,大小和Z-Order.并且可以设置窗口的显示状态
  HWND hWnd 要改变位置,大小,或Z-Order的窗口
  HWND hWndInsertAfter 窗口句柄 hWnd在Z-Order上将被置于他后面
  int x,int y 窗口的位置
  int cx,int cy 窗口大小
  UINT uFlags操作标准
  成功返回TRUE 失败返回FALSE
  uFlags参数
  SWP_NOSIZE    维持当前窗口大小.就是忽略cx和cy参数
  SWP_NOMOVE    维持当前窗口的位置,也就是忽略X和Y参数
  SWP_NOZORDER    不改变窗口Z-Order次序
  SWP_NOOWNERZORDER 不改变Z序中所有者窗口位置
  SWP_NOREDRAW    不重绘窗口
  SWP_NOSENDCHANGING 不发送窗口位置改变消息
  SWP_FRAMECHANGED  强制窗口标题栏以及边框重绘,即发送WM_NCPAINT消息
  SWP_HIDEWINDOW   隐藏窗口
  SWP_SHOWWINDOW   显示窗口
  SWP_NOACTIVATE   不激活窗口
  四.多个窗口同步移动的方法
  BeginDeferWindowPos 返回用于存储多窗口位置和大小信息的句柄HWND
  DeferWindowPos函数把指定窗口的新位置大小信息存储在句柄HDWP中
  EndDeferWindowPos最好调用EndDeferWindowPos来同时更新之前存储好的多窗口位置大小
  HDWP BeginDeferWindowPos(
  int nNumWindos 村粗几个窗口的位置大小信息
  ) 返回值为多窗口的位置跟大小信息
  DeferWindowPos(
  HDWP hWinPosInfo,BeginDeferWindowPos返回的多窗口位置跟大小信息句柄
  HWND hWnd,  要改变位置或大小信息的窗口
  HWND hWndInsertAfter,
  int x,int y,    窗口位置
  int cx,int cy,窗口大小
  UINT uFlags, //跟SetWindowPos的uFlags参数一样
  )
  EndDeferWindowPos(
  HDWP hWinPosInfo eginDeferWindowPos返回的多窗口位置跟大小信息句柄
  )
  函数返回TRUE 成功,FALSE失败
  五、菜单函数
  1.HMENU WINAPI CreateMenu(VOID)
  HMENU WINAPI CreatePopupMenu(VOID)
  2.这两函数都返回了创建后的菜单的句柄.这两个函数的区别:
  CreateMenu是创建水平菜单,通常是放置在顶级窗口中,
  同时也是作为顶级菜单的,就行我们经常看到的"文件"
  编辑,等菜单
  6CreatePopupMenu创建的是一个垂直的弹出菜单,
  经常被用来做另一个菜单的子菜单或者右键菜单
  3.销毁菜单的函数 BOOL WINAPI DestoryMenu(HMENU hMenu)
  4.添加菜单项
  BOOL WINAPI AppendMenu(
  HMENU hMenu,  //要修改的菜单
  UINT uFlag,   //新菜单选项的状态信息,
  MF_STRING 新建一个字符串菜单选项
  MF_BITMAP 新建一个位图菜单选项
  MF_POPUP 新选项为一个弹出式菜单
  MF_CHECKED 新选项为一个已选中的菜单选项,即菜单选项前面有一个打钩
  MF_DISABLED 新建一无法选中的菜单项,但外观不变灰
  MF_GRAYED 新菜单选项无效,用户无法选中该选项, 且外观变灰
  UINT_PTR uIDNewItem, //新菜单选项的命令ID
  LPCWSTR lpNewItem  //新菜单选项的内容,
  如果是MF_BITMAP 则为位图的句柄,否则为显示在菜单项上的内容.
  )
  5.设置菜单项的前面是否要打钩
  DWORD CheckMenuItem(
  HMENU hMenu,  //要设置的菜单句柄
  UINT uIDCheckItem, 要设置的菜单项
  要么是菜单的ID,要么是索引值,值类型取决于 uCheck
  UINT uCheck
  MF_BYCOMMAND 指明使用菜单项的ID
  MF_BYPOSITION 指明菜单项使用索引值
  MF_CHECKED: 为菜单添加打钩标志
  MF_UNCHECKED 去除打钩标志
  6.禁用一个菜单项
  BOOL EnableMenuItem
  参数1 hMenu 菜单句柄
  参数2 和上面一样
  参数3
  MF_BYCOMMAND 指明使用菜单项的ID
  MF_BYPOSITION 指明菜单项使用索引值
  MF_DISABLED 设置菜单项禁用 但不变灰
  MF_ENABLED 设置菜单项启用
  MF_GRAYED 设置菜单项禁用,选项变灰
  7.在指定位置显示一个弹出菜单
  BOOL TrackPopupMenu
  参数1 菜单句柄
  参数2 uFlags 菜单属性
  int x,int y,屏幕坐标系,菜单的左上角坐标
  int nReserved,保留着 为0即可
  HWND hWnd 此窗口接收菜单的消息
  函数返回前,此窗口不接收菜单的WM_COMMAND消息
  CONST RECT*prcRect 保留值 NULL即可
  uFlag参数属性:
  设置菜单的水平方向的定位
  TPM_CENTERALIGN: 弹出的菜单中心位置与参数x对齐
  TPM_LEFTALIGN: 弹出的菜单左边界位置与参数x对齐
  TPM_RIGHTALIGN: 弹出的菜单右边界位置与参数x对齐
  设置菜单的垂直方向定位
  TPM_BOTTOMALIGN: 弹出的菜单底边界与参数y对齐
  TPM_TOPALIGN: 弹出的菜单顶边界位置与参数y对齐
  TPM_VCENTERALIGN: 弹出的菜单中心位置与参数y对齐
  设置菜单是否向窗口发送消息
  TPM_NONOTIFY 用户选择菜单项后 不发送消息给窗口
  TPM_RETURNCMD 用户选择菜单后,直接把菜单项的ID返回到返回值里
  设置用户要鼠标的哪个键来选择菜单
  TPM_LEFTBUTTON 鼠标左键
  TPM_RIGHTBUTTON 鼠标右键
  六、广播消息
  1.SendMessage 只能发送一个消息给一个窗口
  如果要给多个窗口发送同一个消息的话,就要用到广播消息
  2.把某个消息广播给指定的接收者,接收者可以是一个应用程序
  网络驱动器,系统级设备驱动器,应用程序的顶级窗口
  也能接收到广播消息,
  3.广播消息的消息值 必须是系统中已经注册的消息值
  所以是不能使用自定义消息的.
  4.向Windows注册消息
  UINT RegisterWindowMessage函数
  注册一个新的窗口消息.保证该消息的值在体统范围内是唯一的
  参数 LPCTSTR lpString  被注册的消息的名字
  返回 被注册的消息值
  5.广播系统已注册的消息
  long BroadcastSystemMessage
  (
  DWORD flags 选项
  BSF_QUERY 每次发送消息给一接收者,只有接收者返回TURE才发送给下一个接受者
  BSF_NOHANG 把挂起的应用程序当成超时,有一个接受者超时,就停止广播
  BSF_NOTIMEOUTINFOTHUNG 只要接收者没挂起,一直等待消息响应,不会出现超时
  BSF_FORCEIFHUNG 继续广播消息,即使超时或者接受者挂起
  BSF_POSTMESSAGE 寄送消息,不等待消息响应,直接返回
  BSF_IGNORECURRENTTASK 不发送消息给属于当前任务的窗口,这样应用程序就不会接收自己的消息
  LPDWORD lpInfo 指向接受者信息的DWORD指针 并可以为下列值组合
  BSM_ALLCOMPONENTS 广播到所有的系统组件
  BSM_ALLDESKTOPS 广播到所有桌面
  BSM_APPLICATIONS 广播到应用程序
  UINT Msg 消息ID
  WPARAM wParam消息参数
  LPARAM 消息参数
  )
  七、动态的将一个窗口嵌入到一个窗口
  1.首先这个窗口样式一开始是Popup,
  当你拖动这个窗口到要嵌入的窗口,然后你修改样式为WM_CHILD
  2. 设置父窗口
  HWND SetPaert(
  参数1 hWndChild  指定的窗口新父窗口的子窗口
  参数2 hWndNewParent  新父窗口
  返回值 hWndChild之前的父窗口

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-524122-1-1.html 上篇帖子: Gartner:2012年的云安全HypeCycle 下篇帖子: windows cscope-cmdblock
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表