• 位定义,用于判断是否包含某属性


           很多时候,对象有很多属性,我们可以增删对象的属性的支持,这时候,位定义是比较好解决问题的。

            以windows窗口为例,窗口属性WS_OVERLAPPED,WS_BORDER,WS_DLGFRAME,WS_VSCROLL,WS_HSCROLL等等。

            我们想加上WS_VSCROLL属性的常用写法

            DOWRD ws_old = GetWindowLongA(hWnd,GWL_STYLE);  //获取目前属性

            ws_old |=WS_VSCROLL;

            或者去掉WS_VSCROLL属性

            ws_old &=~WS_VSCROLL;

            判断时候具有WS_VSCROLL属性

            if(ws_old & WS_VSCROLL)

            用起来十分方便,那么如何进行位定义呢?

            方法一:用enum

            enum class WINDOW_STYLE: char  //大小可以按照需求更改        

            {

                 WS_BASE=1,

                 WS_OVERLAPPED=WS_BASE<<1,

                  WS_BORDER=       WS_BASE<<2,

                  WS_DLGFRAME=   WS_BASE<<3,

                  WS_VSCROLL=      WS_BASE<<4,

                 WS_HSCROLL=       WS_BASE<<5

            }

           优点:类型保护,调试更清楚

           缺点:无法直接进行位操作。

     2、用define

            

              #define  WS_BASE   1

              #define   WS_OVERLAPPED  (WS_BASE<<1)

              #define   WS_BORDER           (WS_BASE<<2)

              #define    WS_DLGFRAME     (WS_BASE<<3)

              #define    WS_VSCROLL        (WS_BASE<<4)

              #define   WS_HSCROLL         (WS_BASE<<5)

          优点:可以直接进行位运算

          缺点:移位操作符的优先级很低,必须加括号保护

    3、用define与16进制

         

              #define  WS_BASE                  1

              #define   WS_OVERLAPPED  2

              #define   WS_BORDER           4

              #define    WS_DLGFRAME     8

              #define    WS_VSCROLL       0x10

              #define   WS_HSCROLL        0x20

          优点:可以直接进行位运算

          缺点:排列不整齐,可以稍微改进下

          

              #define  WS_BASE                  0x0001

              #define   WS_OVERLAPPED  0x0002

              #define   WS_BORDER           0x0004

              #define    WS_DLGFRAME     0x0008

              #define    WS_VSCROLL        0x0010

              #define   WS_HSCROLL         0x0020

     是不是舒服很多。。。      附windows的定义

  • 相关阅读:
    行盒(line box)垂直方向的属性详解:从font-size、line-height到vertical-align
    CSS绝对定位的原点:是在border上、padding上还是在content上?
    从知乎首页用户操作入口学习到的CSS技巧
    重置表单中的文件上传控件(file input)的方法
    ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记
    Yarn的Linking dependencies特别慢的优化方法
    MongoDB学习记录(四)
    MongoDB学习记录(三)
    MongoDB学习记录(二)
    AdBlock——拦截网页广告
  • 原文地址:https://www.cnblogs.com/xuhuajie/p/11338952.html
Copyright © 2020-2023  润新知