友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
C语言实例教程(PDF格式)-第38部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
值 默认值为假
Right aligned 指定文本为右对齐。类型:布尔值
text: 默认值为假
Right…to…left 使用从右向左的阅读方式来显示文
reading 本。主要用于希伯来语系和阿拉伯语
…………………………………………………………Page 317……………………………………………………………
order: 等。类型:布尔值 默认值为假
l 技巧:
l 如果需要在控件的标题文本中使用 “&”符,可以使用双写的
“&”符,如按钮文本 “&File && Directory”在显示时将成为
。
l 如果需要在控件标题中使用多行文本,可以将按钮控件的
Multiline属性设置为真,然后在需要换行的地方使用转义字符
〃n〃 或 〃r〃。在Multiline属性值为真的情况下,如果文本行的
宽度超过了控件的宽度,即使没有使用换行转义字符,文本也将
会在合适的地方进行折行处理。但要注意,其它一些转义字符序
列,如 〃t〃 等不被控件所支持。
我们一般只处理按钮控件一种通知消息:BN_CLICKED,该消息表示用
户单击了该按钮控件。按钮控件的另外一种通知消息是
BN_DOUBLECLICKED,它表示用户双击了按钮控件,但是一般情况下我
们不需要处理下压按钮的双击事件。
图6。 13 ClassWizard对话框:Message Maps选项卡
下面我们介绍如何为下压按钮的单击事件添加消息处理函数和消息映
射,这里我们假设所添加的下压按钮ID为IDC_CLICKHERE,标题文本
为 “单击这里 (&C)”,其余属性使用默认设置。
第一种方法如下:
…………………………………………………………Page 318……………………………………………………………
1。 在资源编辑器右击按钮IDC_CLICKHERE,选择 “ClassWizard”,
打开如图6。13所示的窗口,单击Message Maps选项卡。
确信在Project处选择的工程为当前工程,Class name处为当前对话
框模板所对应的类。Object IDs列表框中给出了当前对话框类中的所
有对象标识符,从中选择IDC_CLICKHERE,即我们刚才添加的下压按
钮,这里,在右边的Message列表框中给出了当前对象的消息,这里
即BN_CLICKED和BN_DOUBLECLICKED,从中选择BN_CLICKED (它代表了
按钮的单击事件),然后单击右边的Add Function按钮 (注意:Add
Function按钮仅当已选择了某一消息时才会出现)。
图6。 14 决定是否需要更改命令处理函数名
图6。 15 为控件通知消息添加处理函数
2。 在随后出现的对话框 (如图6。14所示)中选择是否需要更改命令处
理函数的函数名。ClassWizard的默认函数名遵从于下面的命令协
议:
前缀On + 控件ID中除去IDC_前缀的剩余部分
这里我们接受默认的命令处理函数名OnClickhere。
…………………………………………………………Page 319……………………………………………………………
3。 新添加的命令处理函数OnClickhere已经出现在图6。13所示的对话
框中的下面的Member functions部分。同时,Edit Code按钮获得输
入焦点。单击该按钮,ClassWizard将在Developer Studio的代码编
辑器窗口中打开函数OnClickhere,并高亮度显示下面的// TODO注
释:
// TODO: Add your control notification handler code here
我们使用下面的代码来替换上面的// TODO注释:
MessageBox
(〃您刚才单击了按钮 IDC_CLICKHERE; 因此相应的命令处理函数 OnClickhere 被调用!〃);
第二种方法:
1。 在资源编辑器中右击按钮IDC_CLICKHERE,选择Events命令,打开
如图6。15所示的对话框:
2。 在Class or object to handle列表框中选择IDC_CLICKHERE,然
后在New Windows messages/events列表框中选择BN_CLICKED,单击
右边的Add and Edit,余下的步骤同第一种方法的第2步开始相同。
这时编译并运行上面的程序,单击标签为 “单击这里”的下压按钮,
弹出如图所示的消息框。
图6。 16 程序PushButton的运行结果
下面我们来看相应的消息映射。
首先,在类CPushButtonDlg的定义中添加了消息处理函数
OnClickhere的原型:
afx_msg void OnClickhere();
函数OnClickhere的声明被放进了两行注释分隔符//{{AFX_MSG
(CPushButtonDlg)和//}}AFX_MSG之间。前面我们提到过,
ClassWizard将由它定义的消息处理函数的声明放入这两行注释分隔
符之间。
下面我们来看相应的消息映射入口。它位于实现文件
…………………………………………………………Page 320……………………………………………………………
PushButtonDlg。cpp中的两个宏BEGIN_MESSAGE_MAP和
END_MESSAGE_MAP之间:
ON_BN_CLICKED(IDC_CLICKHERE; OnClickhere)
其中第一个参数IDC_CLICKHERE为控件的标识符,第二个参数
OnClickhere为相应的消息处理函数。
一旦弄清楚了由ClassWizard添加这些代码,我们就可以手动的添加
命令消息处理函数的消息映射。但是,从上面的过程中我们可以很明
显的看出一点,使用ClassWizard来完成这一点要简单得多。
下面我们介绍与下压按钮控件有关的几个技巧:
(1) 在运行过程中改变下压按钮的标题文本
有时候我们需要在程序运行的过程中改变按钮的标题文本。典型的,
我们可能需要根据用户所输入的数据来决定按钮上应该写些什么。我
们到前面去看一下表6。14,看一看有什么成员函数可以完成这种功
能。
很好,类CWnd的成员函数SetDlgItemText可以由窗口或对话框所有的
控件的标题文本。其原型如下:
void SetDlgItemText( int nID; LPCTSTR lpszString );
其中nID为控件标识符 (ID),lpszString为控件的新标题文本。
成员函数SetDlgItemText事实上是向控件发送一条WM_SETTEXT消息,
该消息的wParam参数必须为0,而lParam为指向窗口标题文本字符串
的指针。
因此,SetDlgItemText等价于下面的函数调用:
CWnd::SendDlgItemMessage(nID; WM_SETTEXT; 0; LPARAM(lpszString));
或
::SendDlgItemMessage(GetSafeHwnd(); nID; WM_SETTEXT; 0; LPARAM(lpszString));
比如说,我们用以将下面的代码添加到OnClickhere中对MessageBox
的调用之后:
SetDlgItemText(IDC_CLICKHERE;〃此按钮已被单击过。〃);
…………………………………………………………Page 321……………………………………………………………
使用按钮无效 或有效
(2) ( )
假设我们在上面的例子中希望用户只能单击按钮IDC_CLICKHERE一
次。那么,按钮IDC_CLICKHERE被单击一次之后应该变灰,以禁止用
户再次单它。这可以通过下面的步骤来实现:
首先调用对话框对象的成员函数GetDlgItem (该成员函数在类CWnd中
定义),该成员函数获得一个指向对话框中的控件的CWnd指针,然后
再通过该指针调用控件对象的成员函数EnableWindow (该成员函数在
类CWnd中定义)。该成员函数允许或禁止调用它的CWnd对象对应窗
口。整个过程可以使用一行语句来实现,如下所示:
GetDlgItem(IDC_CLICKHERE)…》EnableWindow(FALSE);
其中GetDlgItem函数以控件的ID为参数,返回值的类型为CWnd *,如
果需要通过该指针调用在类CButton所定义的成员函数,可以使用强
制类型转换。EnableWindow以一个布尔值为参数,该参数为真时表示
允许该窗口接受鼠标和键盘输入,为假时禁止该窗口接受鼠标和键签
署输入。这里再一次强调,控件本身也是一种窗口。
将上面的代码放到命令处理函数OnClickhere的最后,这样,在单击
一次按钮 “单击这里”之后,对话框如图6。17所示。
图6。 17 处于禁止状态的控钮控件
此外,如果使用了ClassWizard为按钮建立了对话框的成员变量的数
据映射,则可以通过对话框中的成员变量直接操纵控件。在本例中,
如果我们已将下压按钮映射为类型为CButton的成员变量
m_bnClickhere,则可以通过下面成员函数调用设置按钮的允许状
态:
m_bnClickhere…》EnableWindow(FALSE);
(3) 使按钮获得输入焦点
具有输入焦点的窗口将会得到所有的键盘输入消息。我们可以通过类
CWnd的成员函数GetFocus来使对话框中的控件获得输入焦点。
试将下面的代码加到消息处理函数OnInitDialog的return语句前:
…………………………………………………………Page 322……………………………………………………………
m_bnClickhere。SetFocus();
或
GetDlgItem(IDC_CLICKHERE)…》SetFocus();
编译并运行程序。非常奇怪,输入焦点并没有被设置到下压按钮 “单
击这里”上。依然是按钮 “确定”拥有当前输入焦点。
请注意这样的事实:
l 注意:
l 如果在消息处理成员函数OnInitDialog中将输入焦点设置到指定
的控件,则函数应该返回FALSE,这是因为如果WM_INITDIALOG消
息的处理函数返回真值,Windows会将输入焦点设置为对话框中的
第一个控件。因此,如果在该处理函数中设置了控件的输入焦
点,WM_INITDIALOG消息的处理函数应该返回假值。
将下面的代码
return TRUE;
修改为
return FALSE;
这时再编译并运行程序,则输入焦点将被正常地设置到下压按钮 “单
击这里”上。这时按下空格键相当于在按钮 “单击这里”上单击鼠标
左键。
(4) 使用图形代替文本
在一些应用程序,尤其是一些多媒体应用程序中,我们希望按钮的外
观看起来更加的美观,比如说我们希望使用多变的图形代替单调乏味
的纯文本。对于一般的按钮控件,我们可以使用两种方法来在按钮中
使用图形来代替文本。
第一种方法是使用图标来代替文本。下面的示例说明了这种用法:
1。 使用资源编辑器或其它工作编辑一个图标资源,其ID为
IDI_CLICKHERE,图案如图6。18所示。
2。 在希望使用图标图案的按钮控件的Properties属性框在Styles选
…………………………………………………………Page 323……………………………………………………………
项卡中设置Icon属性为真。并按图6。19修改对话框及其中控件的大
小。
3。 在类CPushButtonDlg的消息处理成员函数OnInitDialog中添加下
面的代码。这些代码应该在对基类的OnInitDialog成员函数的调用之
后。
图6。 18 图标IDI_CLICKHERE
图6。 19 为使用图标按钮修改
对话框中控件的大小
HICON hIcon=AfxGetApp()…》LoadIcon(IDI_CLICKHERE);
m_bnClickhere。SetIcon(hIcon);
编译该应用程序,运行结果如图6。20所示。
图6。 20 在按钮中使用图标的示例
这时单击按钮Click Here,图标图案会有向右和向下下压的效果。
第二种方法是使用位图来代替文本。步骤如下:
图6。 21 位图资源IDB_CLICKHERE
…………………………………………………………Page 324……………………………………………………………
1。 向工程资源中添加如图6。21的位图资源,其ID为IDB_CLICKHERE。
2。 在希望使用位图图案的按钮控件的Properties属性框在Styles选
项卡中设置Bitmap属性为真。我们注意到Icon属性和Bitmap属性是互
斥的,即选择一属性的同时也清除了另一属性。并按图6。19修改对话
框及其中控件的大小。同时参考最终运行结果(如图6。22)修改对话框
及其按钮的大小。
3。 在OnInitDialog成员函数中添加如下的代码:
HBITMAP hBitmap=LoadBitmap(AfxGetApp()…》m_hInstance;MAKEINTRESOURCE
(IDB_CLICKHERE));
m_bnClickhere。SetBitmap(hBitmap);
在上面的代码中,我们使用Win32 API函数LoadBitmap (注意它不是
类CWinApp的成员函数)来加载位图资源IDB_CLICKHERE,从而获得位
图句柄hBitmap,最后以该句柄为参数调用类CButton的成员函数
SetBitmap。
编译并运行上面的程序,得到如图6。22所示的运行结果。
图6。 22 在按钮中使用位图的示例
l 注意:
l 在上面的示例程序中我们使用了真彩色 (24位)的位图。这样的位
图不可以使用资源编辑器来进行编辑。上面的位图是使用其它专
门的图形工具来进行编辑并保存到文件Clickhere。bmp中的。请按
下面的步骤将该文件添加为工程的资源:
1。 选择Insert菜单下的Resource命令,打开如 图所示的对话
框。
…………………………………………………………Page 325……………………………………………………………
图6。 23 插入新的资源
2。 从中单击Import按钮,从位图文件Clickhere。bmp中输入
资源。注意在文件类型中选择 “All files (*。*)”。
Developer
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!