CBitButtonNL继承自CButton控件类,能实现鼠标热敏,显示3d文字,可根据按键的聚焦、按下、热态、失效等操作显示不同按键位图,达到动态效果。好东西要好好保存着,以备不时之需~

在工程中加入BitButtonNL.h和BitButtonNL.cpp文件,然后便可使用该类提供的函数进行操作。例如,在对话框类C***Dlg.cpp的OnInitDialog函数中可以添加如下代码:

CBitButtonNL m_btnSearch;    
CString strFontName 
=  _T( " 宋体 " );

// set bitmap
 m_btnSearch.SetBitmaps(
                                          IDB_BITMAP_OTHER_NORMAL, 
                                          IDB_BITMAP_OTHER_DOWN, 
                                          IDB_BITMAP_OTHER_UP, 
                                          IDB_BITMAP_OTHER_NO);     
// 按钮的四种位图
 m_btnSearch.SetForceColor(RGB( 0 0 0 ), RGB( 0 0 0 ), RGB( 0 0 0 ));      // 文字颜色
 m_btnSearch.SetSound(MAKEINTRESOURCE(IDR_WAVEMOVE), ::GetModuleHandle(NULL));      // 聚焦声音
 m_btnSearch.SetSound(MAKEINTRESOURCE(IDR_WAVECLICK), ::GetModuleHandle(NULL), TRUE);     // 按下声音
 m_btnSearch.SizeToContent();              // 按钮自动适应第一个图片大小
 m_btnSearch.SetWindowText(TEXT( " 搜索 " ));          // 改变按钮显示文字
 m_btnSearch.SetBtnCursor(IDC_CURSOR_HAND, FALSE);          // 按钮鼠标类型
 m_btnSearch.SetTextAlign(NL_ALIGN_CENTER, FALSE);             // 设置文字排列方式
 
// set font
 m_btnSearch
  .SetDrawText(TRUE, FALSE)            
// 是否显示按钮文字
  .SetFont3D(FALSE,  3 2 , FALSE)       // 显示文字3d效果
  .SetText3DBKColor(RGB( 95 95 95 ))         // 3d阴影颜色
  .SetFontBold(TRUE, FALSE)        // 粗体
  .SetFontSize( 10 , FALSE)               // 字体大小
  .SetFontName(strFontName)          // 字体名称
  ;

其中:
(1)IDB_BITMAP_OTHER_NORMAL、IDB_BITMAP_OTHER_DOWN、IDB_BITMAP_OTHER_UP、IDB_BITMAP_OTHER_NO分别是按键默认、按下、热态、失效时的位图资源ID;
(2)IDR_WAVEMOVE和IDR_WAVECLICK是.wav音频资源ID;
(3)IDC_CURSOR_HAND是cursor资源ID。

源代码如下:
/Files/amazon/CBitButtonNL.rar