通过水平滑动条可以选择不同的头像。
(1)滑动条控件对象的添加
为滑动条控件添加类别为“Control”的变量,变量名为m_ctlSBFace。
(2)滑动条范围的设置
在对话框类的OnInitDialog()函数中,通过m_ctlSBFace设置滑动条的范围。
m_ctlSBFace.SetScrollRange(0, 3);
其中,0表示滑动条的起始值,3表示结束值。因为导入了4个头像位图,所以范围设置为0~3。
(3)WM_HSCROLL消息的响应
用户可以通过水平滑动条来选择不同的头像。因此,需要添加对话框对WM_HSCROLL消息的响应OnHScroll()函数,即按下水平滑动条按键时,要调用的函数。
当用户按下水平滑动条的左侧按键或者右侧按键时,在OnHScroll()函数中主要完成两个功能:一是将滑块向左或者向右移动,二是根据滑块的位置显示不同的头像。
在OnHScroll()函数中通过int类型的变量scrollpos_current来表示滑动条滑块的位置。首先获取滑块的当前位置:
scrollpos_current = m_ctlSBFace.GetScrollPos();
其中,m_ctlSBFace是滑动条添加的变量。
接下来判断用户点击了滑动条的左侧按键还是右侧按键,通过OnHScroll()函数的参数nSBCode进行判断
switch(nSBCode)
{
caseSB_LINELEFT:
if( scrollpos_current>scrollpos_min)
{
scrollpos_current--;
}
break;
caseSB_LINERIGHT:
if(scrollpos_current<scrollpos_max )
{
scrollpos_current++;
}
break;
default:
break;
}
其中,SB_LINELEFT表示用户点击了左侧按键,SB_LINERIGHT表示用户点击了右侧按键。当用户点击了左侧按键,则滑块的当前位置值减1,当用户点击了右侧按键,则滑块的当前位置加1;scrollpos_min和scrollpos_max表示滑块位置的最大值和最小值,在每次对scrollpos_current进行操作时,需要保证其在scrollpos_min和scrollpos_max的范围之内。
在确定了滑块的位置之后,接下来通过该位置在头像位图控件中显示不同的头像。
switch(scrollpos_current)
{
case 0:
m_ctlFace.SetBitmap(m_hBmp0);
break;
case 1:
m_ctlFace.SetBitmap(m_hBmp1);
break;
case 2:
m_ctlFace.SetBitmap(m_hBmp2);
break;
case 3:
m_ctlFace.SetBitmap(m_hBmp3);
break;
}
其中,scrollpos_current表示滑块的当前位置;m_ctlFace是滑块控件的变量,m_hBmp0~m_hBmp3是导入头像位图的句柄。如图2-7所示。
图2-7 玩家头像的选择
2.3.4 昵称编辑框控件的设置
为昵称编辑框控件添加一个类别为“Value”的变量,变量名为m_strName,用于保存玩家的姓名。
2.3.5 “按键”按键BN_CLICKED消息的响应
为“确定”添加BN_CLICKED消息添加响应函数OnBnClickedOk(),在该函数中,获取用户选择的头像和输入的昵称。
(1)用户选择头像的获取
获取用户选择的头像,实际上就是获取用户选择头像的ID。为水平滑动条添加类别为“Value”的变量m_iFaceID,表示用户选择头像的索引。
(2)用户设置昵称的获取
通过UpdateData()函数获取昵称,代码如下:
UpdateData(TRUE);
通过以上代码,用户设置的昵称保存在m_strName中。