当前位置:C++技术网 > 资讯 > 按钮控件和窗口上的文字的显示和获取,设置窗口标题和获取窗口标题

按钮控件和窗口上的文字的显示和获取,设置窗口标题和获取窗口标题

更新时间:2015-06-23 11:55:13浏览次数:1+次

     对于按钮的文本,在资源视图下,我们可以直接对按钮的文本进行编辑。但是有时候,我们需要对按钮的文本进行编程控制。也就是说,在单击一个按钮后或者单击按钮自己后可以改变自己和获取按钮自己的文本,在单击按钮时可以根据按钮的文本来做不同的响应。比如,一个按钮开始时文本是“写入文件”,但是因为文本大,在写的过程中,用户可能想取消,但是又不想多加一个按钮,只是为了取消,所以就可以直接改变按钮文本,通过按钮文本进行判断。如果单击“写入文件”,然后使按钮文本变成“取消写入”,这样就不用再多加一个按钮了,很多软件都是这样做的。
    那么现在我们就来看看按钮文本怎么处理。对于初学者来说,在还不熟悉MFC时,查看到CButton类时,类里面并没有设置和读取按钮的成员函数,这就使之不知道如何处理了。在《MFC创建按钮并响应按钮事件》一文已经提到,CButton按钮类是集成至CWnd窗口类的,因为CWnd类是其基类,而基类中的非私有成员都是可以被继承的,也就是说,基类的成员函数也是可以使用的。通过查看基类的成员函数,可以找到GetDlgItemText、SetDlgItemText、GetWindowText、SetWindowText这四个函数是可以进行文本的设置或获取的。而CWnd类是所有窗口类的基类,因此,这四个函数可以应用于所有的窗口类,比如控件、从CWnd类派生的窗口类。
    首先看看获取文本函数的使用。GetDlgItemText函数有两个版本,第一个版本是有三个参数的,第二个版本是两个参数的。如下:
(1) int GetDlgItemText(int nID,LPTSTR lpStr,int nMaxCount ) const;
(2) int GetDlgItemText(int nID,CString& rString ) const;
    两个版本的第一个参数都是控件的ID值,也就是在资源视图时给控件指定的ID,如IDC_WRITEFILE这样的,这个是一个宏,实际上就是一个整数值。第二个参数是LPTSTR lpStr,这是中性的字符串指针,接收_T("写入文件") 这样的参数,而CString& rString,则是一个CString对象,是MFC的一个字符串类,具有长度自动扩展的特性,相当于一个动态字符数组。因此没有第三个参数指定字符串长度。而在第一个版本中,因为是一般的字符串,则要指定一个最大字符串长度,以免字符串长度超过最大长度导致内存超界,给定一个字符串最大长度就保证不会超界,但是真要超过则会截断。
      两个函数的返回值都是整型,表示的是实际从控件中获取的字符个数,不包括结尾的空字符,如果没有获取到字符则返回0。而后面的const是C++中的一个语法规则,表示这个成员函数不能修改成员变量的值。
       注意,获取的控件的文本指的是,如果是按钮,则是按钮上的文本,如果是窗口,则是窗口的标题。
      (3)int GetWindowText(LPTSTR lpszStringBuf,int nMaxCount ) const;
      (4)void GetWindowText(CString& rString) const;
这两个函数也是获取窗口的文本,同样适用于控件,因为控件也是窗口。用法和上面的函数差不多,参数也是一样的。对于lpszStringBuf参数接收的文本,要判断是否成功,可以直接判断返回值是否为0,而下面一个函数,因为返回值是void,要判断,则判断rString是否为空即可,方法是:rString.IsEmpty();如果函数返回TRUE,则是空的,否则就不是空的。
       再看看设置文本的函数。
      (5)void SetDlgItemText(int nID,LPCTSTR lpszString );
      (6)void SetWindowText(LPCTSTR lpszString );
      设置文本的使用就比较简单,参数的类型和获取文本的一样。返回值为void,表示一定会成功。
      最后要注意一下,SetDlgItemText和GetDlgItemText两个函数第一个参数是需要窗口ID的,而SetWindowText和GetWindowText是不需要控件ID的。也就是说,前面两个函数,只要给出了窗口ID就可以设置后获取或设置给定窗口ID的文本,而后面两个函数则因为没有这个ID,则只操作本窗口的文本,这点需要注意。因此,如果要用后面两个函数操作其他控件的文本,比如在主窗口修改控件的文本,则需要先获取控件的窗口对象的指针,然后转换成控件对象的类型,再调用这两个函数操作控件的文本,比如((CButton*)GetDlgItem(IDOK))->SetWindowText(_T("写入文件"));这样就可以实现。这样的话,(1)(2)(5)(6)函数操作就显得更加简洁些,至于使用哪个看个人习惯了。
       以后的文章,则对这些介绍过的参数类型就不做介绍了。还有不懂的,可以对文章进行评论。  MFC创建按钮并响应按钮事件