windows读书笔记------子窗口控件

  

      WM_COMMAND消息:

               LOWORD(wParam)         子窗口ID

                HIWORD(wParam)          通知码

               lParam                                 子窗口句柄

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

按钮类

创建按钮控件时,其类名为”buttton".

  通知码

      1)BN_CLICKED,BN_PAINT,BN_HILITE或BN_PUSHED,BN_UNHILITE或BN_UNPUSHED,BN_DISABLE,这些同志码用于过时的按钮样式BS_USERBUTTON.

      2)BN_SETFOCUS,BN_KILLFOCUS仅当按钮样式为BS_NOTIFY是才发送。

      3) BN_DOUBLECLICKED或BN_DBLCLK只用于BS_RADIOBUTTTON,BS_AUTORADIOBUTTON,BS_OWNERDRAW,或者按钮样式包含BS_NOTIFY的其他按钮。

 按钮消息

      BM_GETCHECK          BM_SETCHECK

      BM_GETSTATE            BM_SETSTATE

      BM_SETSTYLE             BM_CLICK

      BM_GETIMAGE             BM_SETIMAGE

 获取子窗口ID:

      id=GetWindowLond(hwndchild,GWL_ID);

     id=GetDlgCtrlID(hwndchild);

获取子窗口的句柄:

     hwndchild=GetDlgItem(hwndparent,id);

获取父窗口的句柄:

     hwndparent=GetParent(hwndchild);

获取实例句柄:

      GetWindowLong(hwnd,GWL_HINSTANCE);

1)按钮

      窗口样式:BS_PUSHBUTTON和BS_DEFPUSHBUTTON,这两个窗口样式作为子窗口空间时,是同样类型,只是BS_DEFPUSHBUTTON的边框粗一些。但两种样式用于对话框时,完全不同的功能。

     当鼠标按下按钮时,其通知码为BN_CLICKED。

     其可以通过父窗口发送BM_SETSTATE和BM_GETSTATE消息来设置和获取按钮的状态。

    SendMessage(hwndButton,BM_SETSTATE,1,0);//设置按钮为按下状态

    SendMessage(hwndButton,BM_SETSTATE,0,0);   //设置按钮恢复到正常状态

2)复选框

      窗口样式:BS_CHECKBOX样式,该种样式必须自己给空间发送一个BM_SETCHECK消息来设置其选中状态。当wParam的值为1时,为选中,为0时则为清除状态。也可通过发送一BM_GETCHECK消息来获取其状态。

           SendMessage(hwndButton,BM_SETCHECK,1,0); 

           SendMessage(hwndButton,BM_GETCHECK,0,0);

         而BS_AUTOCHECKBOX样式,其窗口过程自动清除和设置其状态,通常可以忽略WM_COMMAND消息。

          还有BS_3STATE和BS_AUTO3STATE样式。其增加了一种状态-----一个灰色的复选框,表示其不可用。

3)单选按钮

      窗口样式:BS_RADIOBUTTON和BS_AUTORADIONBUTTON,但是值得注意的是BS_AUTORADIOBUTTON按钮只能用于对话框。也可通过消息BM_SETCHECK和BM_GETCHECK来设置或者获取其状态

4)组合框

     窗口样式:BS_GROUPBOX。这种空间不接受鼠标或者键盘输入,也不向父窗口发送WM_COMMAND消息。其文本显示在矩形区域的顶部

5)设置文本的方法

     SetWindowText(hwnd,string);

     length=GetWindowText(hwnd,string,imaxlength);

     length=GetWindowTextLength(hwnd);

6)显示和隐藏按钮

      当在创建按钮时,设置样式为WS_VISIBLE时,就无需在在调用显示函数。

      ShowWindow(hwndchild,SW_SHOWNORMAL);

     ShowWindow(hwndchild,SW_HIDE);

     IsWindowVisible(hwndchild);

     EnableWindow(hwndchild,FALSE);//禁用窗口

     EnableWindow(hwndchild,TRUE);//启用窗口

    IsEnableWindow(hwndchild);//判断窗口是否可用

  7)输入焦点

      注意:当一个窗口失去焦点时,会向它发送WM_KILLFOCUS消息,其wParam为将要获得焦点窗口的句柄.而当一个窗口获得焦点时,会收到WM_SETFOCUS消息,其wParam 为失去焦点窗口的句柄。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

静态类

创建静态控件的时候,其类名为“static".

         值得注意的是:静态控件其不接受键盘或者鼠标的输入,也不会向父窗口发送WM_COMMAND消息。当你用鼠标在上面移动或者单击时,其回想子窗口会捕获一个WM_NCHITTEST消息,并向windows返回一个HITRANSPATENT值。并导致windows向其父窗口也会发送一个WM_NCHITTEST消息,父窗口将消息交由DefWindowProc处理。

静态窗口样式:

    SS_BLACKRECT          SS_BLACKFRAME

    SS_GRAYRECT           SS_GRAYFRAME

    SS_WHITERECT          SS_WHITEFRAME

    SS_LEFT                        SS_RIGHT

    SS_ CENTER                 SS_ETCHEDHORZ

    SS_ETCHEDVERT       SS_ETCHEDRAME

 设置文本可以通过调用SetWindowText函数来设置。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

滚动条类

创建滚动条控件时,其类名为“scrollbar".

滚动条控件样式:SBS_VERT    SBS_HORZ    SBS_LEFTALIGN     SBS_RIGHTALIGN     SBS_TOPALIGN   SBS_BOTTOMALIGN.

          注意:滚动条控件不会发送WM_COMMAND消息。其和窗口滚动条一样发送WM_VSCROLL和WM_HSCROLL消息,可以通过lparam参数来区分到底是滚动条控件,还是窗口滚动条。如果lparam值为0,则表示其为窗口滚动条;如果其等于滚动条控件的句柄则表示其为滚动条控件。

 

获取窗口滚动条的高度和宽度:

    GetSystemMetrics(SM_CYHSCROLL);

     GetSystemMetrics(SM_CXVSCROLL);

可以通过函数SetScrollRang,SetScrollPos,SetScrollInfo函数来设置滚动条控件的范围和位置,其与窗口滚动条设置的区别在于:滚动条控件第二个参数为SB_CTL,而窗口滚动条的第二个参数为SB_VERT或者SB_HORZ。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

编辑类

 创建编辑控件时,其类名为“edit”

注意:其建立以后就具有删除(ctrl+x),赋值(ctr+c),剪切(ctrl+v)功能.并可通过选中文本。

编辑控件的样式:

    ES_LEFT                 ES_RIGHT                             ES_CENTER

   ES_MULTILINE       ES_AUTOHSCROLL            ES_AUTOVSCROLL

   ES_NOHIDEESEL  

其也接受WM_COMMAND消息

 通知码为:

     EN_SETFOCUS      编辑控件得到了输入焦点

     EN_KILLFOCUS     编辑控件失去了输入焦点

     EN_CHANGE           编辑控件的内容将变化

     EN_UPDATE           编辑控件的内容变化了

     EN_ERRSPACE     编辑控件没有空间了

     EN_MAXTEXT          编辑控件没有空间完成插入了

     EN_HSCROLL       编辑控件水平滚动条被单击了

     EN_VSCROLL        编辑控件垂直滚动条被单击了

传递给控件的消息:

     WM_COPY                    复制到剪贴板

     WM_CUT                      剪切到剪切板

     WM_CLEAR                  清除指定内容但不传到剪贴板

     WM_PASTE                  将剪贴板的内容插入到指定位置

     EM_GETSEL                获得当前选择文本的初始位置和终止位置

     EM_SETSEL                 选着文本

     EM_ REPLACESEL    替代文本  

     EM_GETLINTCOUNT    得到编辑器函数

     EM_LINEINDEX              获得编辑器缓冲区起点到这行的位移量   

     EM_LINELENGTH         得到行的长度

      EM_ GETLINE                复制某一行到缓冲区   

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  

列表框类

在创建列表框控件时,其窗口类名为“listbox".

       列表框分为单选列表框和多选列表框 。

      对于单选列表框,方向键可以同时移动光标和当前的选择,并可以滚动列表框的内容;上下翻页键因为可通过移动光标来滚动列表框,但不会移动选择的项目。按下一个字母键可移动光标和当前选择到以那个字母开头的第一项(或者下一项)。通过单击或者双击鼠标也可以选中该项。

      对于多选列表框,空格键可以切换选择项的选择状态。方向键取消所有以前选定的项目,并移动和选中项,就像单选列表框一样。然而。ctrl键加方向键可以移动光标,但不移动选中项。shift键加方向键可以扩展选中项。单击或者双击多选列表框的一个项目,会取消所有先前选择的项目,只选择被单击的项目。如果在点击或者双击的时候按住shift键,则不会取消先前选择。

注意:对于列表框在默认情况下是不会发送WM_COMMAND消息的,只有在建立列表框是样式中包含LBS_NOTIFY,其才会发送WM_COMMAND消息。

   

如果想让列表框的内容排序,则可以用LBS_SORT样式。

  默认情况下,列表框是单选的,只有包含样式LBS_MULTIPLESEL才会是所选。

 LBS-NOREDRAW样式,会阻止程序在添加项目时自动更新。

 WS_BORDER样式,为列表框添加一个边框。

 WS_SIZEBOX样式,允许用户该表列表框的大小。

 WS_CAPTION样式,允许在父窗口的客户区移动它。

LBS_STANDARD样式,包含LBS_BOTIFY,LBS_SORT,WS_VSCROLL,WS_BORDER.

 

向列表框中添加字符串

字符串可以通常可以通过数字索引来引用,索引0为最上面的项目。

 SendMessage的返回值:如果字符串用完空间,则返回LB_ERRSPACE(-1);如果字符串发生其他错误,则返回LB_ERR(-1);如果成功,则返回LB_OKAY(0)。

如果使用LBS_SORT样式,那么添加字符串的简单方式是使用LB_ADDSTRING:

         SendMessage(hwndlist,LB_ADDSTRING,0,(LPARAM)szstring);

如果维使用LBS_SORT样式,则可以使用LB_INSERTSTRING消息,通过索引值,添加:

         SendMessage(hwndlist,LB_INSERTSTRING,iIndex,(LPARAM)szstring);

 

列出文件

 SendMessage(hwndlist,LB_DIR,iAtrr,(LPARAM)szFileSpec);

   IAtrr为文件属性代码:

     低字节

 DDL_READWRITE        普通文件

DDL_READONLY      只读文件

DDL_HIDDEN             隐藏文件

DDL_SYSTEM              系统文件

DDLL-DIRECTORY        子文件

DDL_ARCHIVE              设置了存档位的文件

高字节

   DDL_DRIVES             包含驱动器字符

    DDL_EXCLUSIVE     只搜索指定的值

当文件属性代码为DDL_READWRITE时,列表框会列出普通文件,只读文件,以及存档位已设置的文件

当文件属性代码为DDL_DIRECTORY时,除上面外还要包含带有方括号的目录名以及子目录名。

当文件属性代码为DDL_DRIVES|DDL_DIRECTORY会将所有可用驱动器,驱动器字符用短划线分割。

文件列表的排列

当列表框的样式包含LBS_SORT时,列表框将首先列出文件限定条件的所有名称,然后列出子目录名称。第一个子目录表将采用如下形式:

    [..]

这种“双点”子目录可以让用户返回上一级目录。当已是根目录时,不出现双点符号。最后,特定的子目录名称用以下方式:

    [子目录名]

后面紧跟有效磁盘驱动器的清单,其形式如下:

    [-A-]

 

 

 

 

 

 

 

  

        

     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值