⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 07.4.2 静态文本控件.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
7.4.2 静态文本控件 
下面,我们要实现这样的功能:当单击"Numberl:"这个静态文本时,把其文本变成:"数值 1:飞首先,在此控件上单击鼠标右键,从弹出的快捷菜单中选择【Properties】菜单命令,即可打开这个控件的属性对话框,可以看到这个控件的ID是: IDC STATIC。然后在此控件上再次单击鼠标右键,在弹出的快捷菜单中选择【ClassWizard】菜单命令,打开 ClassWizard对话框。读者可以在对话框的ObjectIDs列表中查找IDC STATIC,你会发现根本没有这个ID。我们再看看对话框中其他两个静态文本控件,发现它们的ID都是一样的,都是: IDC STATIC。那么是不是同一种类型的控件具有相同的B呢?我们可以再看看三个编辑框控件的ID,将会发现它们是不同的。前面已经介绍过,静态文本框主要是起标签作用的,并不是用来响应诸如鼠标单击这类消息的,所以它们的ID都是一样的,默认都是IDC_STATIC。但在有些特殊情况下,例如本例这种情况,需要处理静态文本控件上的鼠标单击消息,则可以通过修改其 ID的方法,来为它添加所需的消息响应函数。因此,这里我们先将"Number1:"静态文本的ID改为: IDC_NUMBER1。然后再打开 Class Wizard ,就可以在ObjectIDs列表中看到这个新ID了,如图7.19所示。
图7.19列在ObjectIDs列表中的静态文本控件的新E

在Messages列表中选择BN_CLICKED消息,然后单击【Add Function】按钮,将为此消息添加一个消息响应函数: OnNumber1。单击【EditCode】按钮,即可跳转到这个响应函数的定义处。
前面已经讲过,控件实际上也是窗口,因此如果想获取静态文本控件上显示的文本,就可以利用CWnd类的成员函数: GetWindowText来实现。但是首先要获得这个静态文件控件对象,然后才能调用这个对象的GetWindowText函数来获取该控件上显示的文本。如何获取这个静态文本框控件对象呢?这可以利用CWnd类的另一个成员函数:GetDIgltem, 该函数的一种声明形式如下所示: 
CWnd* GetDlgltem( int nID ) consti 
可以看到,这个函数返回一个指向由参数nID指定的控件或子窗口对象的指针。大多数情况下,这个函数都是在对话框中使用的。
如果要设置控件的文本,可以利用CWnd类中与GetWindowText函数相对应的另一个成员函数: SetWindowText来实现。
因此,我们可以为OnNumberl函数编写如例7-13所示的代码。
例7-13 

void CTestDlg : :OnNumber1() 
// TODO: Add y our control not工fication handler code here 
CString str; 
 
if(GetDlgItem(IDC_NUMBER1)->GetWindowText(str), str == "Number1") 
GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:"); 
else 
GetDlgItem(IDC_NUMBER1)-> SetWindowText ( "Number1  " ) ; 

在上述例7-13所示代码中,首先获得IDC NUMBERl这个静态文本控件的文本,然后判断一下该文本是否是 "Number1:",如果是,则将该静态文本控件的文本改变为"数值1:":否则还将该静态文本控件的文本设置回 "Numberl:"。
上述例7-13所示代码中,有一点需要注意: if语句中使用了一条逗号表达式。逗号表达式的结果是最后一个表达式的返回值,这里就是指判断字符串是否相等的那条语句的返回值。 
Build井运行Mybole程序,单击程序菜单栏上的【对话框】菜单,测试对话框窗口出现了,单击该对话框上的 "Numberl:"静态文本框,但是将会发现这个控件的文本并没有改变。作为程序员,这时我们就需要分析一下这个程序,找到错误的根源。首先需要确定调用的函数是否正确,然后再看看设置的文本内容是否正确。实际上,这里真正的原因是因为静态文本控件在默认状态下是不发送通告消息的。我们可以在对话框资源编辑窗口中,打开IDC NUMBERl静态文本控件的属性对话框,选择Styles选项卡,如图7.20所示。
可以看到,默认情况下没有选中Notify这个选项,因此静态文本控件就不能向其父窗口发送鼠标事件,从而父窗口,即本例中的对话框窗口就接收不到在静态文本控件上鼠标单击这一消息。我们把 Notify选项选中,然后再测试一下程序,将会发现这时在 IDC_Nl.爪rt:BERl静态文本控件上单击鼠标左键,即可实现文本的改变。因此,为了使一个静态文本控件能够响应鼠标单击消息,那么需要进行两个特殊的步骤:第一步,改变它的ID:第二步,在它的属性对话框中选中Notify选项。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -