MFC学习笔记之常见控件

Windows系统下的应用是消息映射机制来处理消息的,应用程序中的控件也是如此,每个控件都有对应的消息事件。当然处理事件是需要开发者,自行去创建的。在消息映射机制中,消息包含三个参数:消息值、wParam参数和IParam参数。控件的消息映射宏的格式大致是 ON_消息码(控件ID,消息处理函数名)。具体的可以查阅MSDN文档和之前写的博客。下面开始介绍几种常见的控件。


0x00静态文本框

MFC的静态文本框包含在CStatic类中。

\创建函数

      Create(

           LPCTSTR  lpszText,

           DWORD dwStyle,

           const RECT& rect,

           CWnd *pParentWnd,

           UINT nID = 0xffff

)

参数说明:

        lpszText: 控件中显示的文字

        dwStyle: 控件的风格

MFC学习笔记之常见控件

rect: 指定控件的位置和大小,其兼容RECT结构体或是CRect对象

pParaentWnd: 指定父窗口,不能为空,默认是CDialog对象

nID: 控件ID


\CStatci类的成员函数

_1 GetBitmap   ->   获取由SetBitmap设置位图的句柄

_2 GetCursor   ->   获取由SetSor设置的光标句柄

_3 GetEnhMetaFile  ->  获取由SetEnhMetaFile设置的增强图元文件的句柄

_4 GetIcon  ->  获取由SetIcon设置的图标句柄

_5 SetBitmap  ->  设置控件中显示的位图

_6 SetSor   ->  设置控件中显示的光标图片

_7 SetEnhMetaFile  ->  设置控件中显示的增强图元文件

_8 SetIcon  ->  设置控件中显示的图标


0x01编辑框

MFC中的编辑框包含在CEdit类中。

\编辑框创建

Create(

    DWORD dwStyle,

    const RECT &rect,

    CWnd *pParantWnd,

    UINT nID

)

参数说明:

         dwStyle:编辑框的风格,以下是其一些风格的说明:

_1 ES_AUTOHSCROLL:当用户在行尾输入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文滚向左边

_2 ESAUTOVSCOROLL:当用户在最后一个可见行按回车键时,正文向上滚动一页

_3 ES_CENTER:在多行编辑框中使正文居中

_4 ES_LEFT:正文左对齐

_5 ES_LOWERCASE:把用户输入的字母均转换为小写字母

_6 ES_MULTILINE:指定一个多行编辑器。若多行编辑器不指定ES_AUTOSCROLL,则会自动换行,若不指定为ES_AUTOVSCROLL,则当多行编辑器会在窗口中正文装满时发出警告声音

_7 ES_NOHIDESEL:默认时,当编辑框失去输入焦点后会隐藏所选的正文,当获取输入焦点的时候又显示出来,本项风格可禁止这种行为。

_8 ES_NUMBER:只允许输入数字

_9 ES_OEMCONVERT: 使得正文在ANSI和OEM两个字符集间相互转化

_10 ES_PASSWORD: 将输入的字符均显示为*

_11 ES_READONLY: 编辑框设为只读

_12 ES_RIGHT: 正文右对齐

_13 ES_UPPERCASE: 把用户输入的字母均转换为大写字母

_14 ES_WANTRETURN:使多行编辑器接收利用回车键换行

_15 ES_MULTILINE:编辑框多行显示


         rect: 指定控件的位置和大小,其兼容RECT结构体或是CRect对象

         pParaentWnd: 指定父窗口,不能为空,默认是CDialog对象

         nID: 控件ID


\CEdit类成员函数

1>获取编辑框中的内容(实际上为CWnd类的成员函数)

GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount)

参数说明:

        hWnd:控件的句柄

        lpString:指向接收文本的缓冲区和指针

        nMaxCount:指定要保存在缓冲区的字符的最大个数(含NULL字符),若文本超过该值,则会被截断

2>设置编辑框中的文本内容(实际上为CWnd类的成员函数)

SetWindowText(HWND hWnd,LPTSTR lpString)

        hWnd:控件的句柄

        lpString:指向一个设置的文本字符串的指针

3>返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。nIndex等于-1则返回所选择正文的第一个字符所在行的索引。如果没有选择正文,则返回当前行的行号

LineFromChar

4>返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引

LineIndex

5>获取选择正文的索引范围。nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。如果没有选择正文,则两者均为当前插入符的索引;其另一个重载函数的作用是,选择编辑框中的正文。nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动

GetSel

6>指向的字符串来替换选择的正文

ReplaceSel

7>获取正文的行数,只适用于多行编辑框。如果编辑框没有正文则返回1

GetLineCount

8>获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine 说明了为字符索引。如果nLine 的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。若用于单行编辑框,则函数返回整个正文的长度

LineLength

9>用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。参数nIndex 是行号,lpszBuffer 指向存放正文的缓冲区,nMaxLength 规定了拷贝的最大字节数。若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。需要注意的是,GetLine 函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)

GetLine

10>获取编辑框能够接受的正文的最大字节数

GetLimitText

11>设置用户在编辑框中可以输入的正文的最大长度(字节数)。如果nChars为0,则最大长度为UINT_MAX个字节

LimitText


0x02按钮

MFC中的按钮被封装在CButton类中。

\按钮创建

Create(

     LPCTSTR lpszCaption,

    DWORD dwStyle,

    const RECT &rect,

    CWnd *pParantWnd,

    UINT nID

)

参数说明:

         dwStyle:编辑框的风格,以下是其一些风格的说明:

_1 BS_AUTOCHECKBOX:指定矩形按钮右侧带有标题的选择框,单击鼠标时,按钮会自动置反

_2 BS_AUTORADIOBUTTON:指定一个单选按钮,在圆按钮的右边显示正文,单击鼠标时,按钮会自动置反、

_3 BS_AUTO3STATE:指定矩形按钮右侧带有标题的选择框,且有三种状态:选择、未选择和变灰,单击按钮时会改变状态

_4 BS_CHECKBOX:指定矩形按钮右侧带有标题的选择框

_5 BS_DEFPUSHBUTTON:指定默认的命令按钮,这种按钮的周围有一个黑框,用户可以按回车键来快速选择该按钮

_6 BS_GROUPBOX:指定一个组框

_7 BS_LEFTTEXT:使控件的标题显示在按钮的左边

_8 BS_OWNERDRAW:指定一个自绘式按钮

_9 BS_PUSHBUTTION:指定一个命令按钮

_10 BS_RADIOBUTTION:指定一个单选按钮,在圆按钮的右边显示正文

_11 BS_3STATE:指定矩形按钮右侧带有标题的选择框,且有三种状态:选择、未选择和变灰


         rect: 指定控件的位置和大小,其兼容RECT结构体或是CRect对象

         pParaentWnd: 指定父窗口,不能为空,默认是CDialog对象

         nID: 控件ID


\CButton类成员函数

1>设置在按钮中显示的位图

HBITMAP SetBitmap(HBITMAP hBitmap)

参数说明:

         hBitmap 位图的句柄

返回值:

         按钮原来位图的句柄

2>获取之前由SetBitmap函数设置的按钮位图的句柄

 HBITMAP GetBitmap( ) const

3>设置按钮的风格

void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE)

参数说明:

         nStyle 指定按钮风格

         bRedraw 指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘

4>获取按钮控件的风格

UINT GetButtonStyle( ) const

5>设置按钮的选择状态

void SetCheck(int nCheck)

参数说明:

         nCheck 按钮状态,0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)

6>获取按钮的选择状态

int GetCheck( ) const

返回值:

        按钮状态,0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)

7>设置要显示到按钮上的光标图

HCURSOR SetCursor(HCURSOR hCursor)

参数说明:

         hCursor 光标的句柄

返回值:

         按钮原来光标句柄

8>获取之前由SetCursor设置的光标的句柄

HCURSOR GetCursor( )

返回值:

         按钮原来光标句柄

9>设置要在按钮上显示的图标

HICON SetIcon(HICON hIcon)

参数说明:

        hIcon 图标的句柄

返回值:

        按钮原来光标句柄

10>获取之前由SetIcon设置的图标的句柄

HICON GetIcon( ) const

返回值:

        按钮原来光标句柄

11>设置按钮的高亮状态

void SetState(BOOL bHighlight)

参数说明:

         bHighlight  指定按钮是否高亮显示,非0则高亮显示,否则取消高亮显示状态

12>获取按钮控件的选择状态、高亮状态和焦点状态

UINT GetState( ) const

返回值:

       返回值与各个掩码相与来获得各种状态值,掩码与对应的相与结果说明如下:

       掩码0x0003:用来获取单选按钮或复选框的状态。相与结果为0表示未选中,1表示被选中,2表示不确定状态(仅用于复选框)。
       掩码0x0004:用来判断按钮是否是高亮显示。相与结果为非0值表示按钮是高亮显示的。当单击按钮并按住鼠标左键时,按钮会呈高亮显示。
       掩码0x0008:相与结果为非零值表示按钮拥有输入焦点。