另类参数对话框编程(回调函数,消息捕捉)

简介:      在很多情况下,我们为了获取对话框设置的一些参数,通常都是通过类对象中成员来获取,或者直接获取退出时最后点击的BUTTON的ID号来做一些简单的操作。

     在很多情况下,我们为了获取对话框设置的一些参数,通常都是通过类对象中成员来获取,或者直接获取退出时最后点击的BUTTON的ID号来做一些简单的操作。这样方法虽然稳定,但是有时候未免太带繁琐,近日在看一些书的时候突然看到另外一种好方法,暂且命名为“另类参数对话框编程”,以后想到更好的名字再换吧@

    

     在合格方法中,我们再也无需为一个单独的窗体创建一个专属的Class,获取参数直接用GetDlgXXX函数来获取,具体的代码如下;

 

主体函数代码

 


// AlgorithmDlgProc 消息回调函数

nResult = (int)DialogBox( NULL, MAKEINTRESOURCE(IDD_3D_ALGORITHM),
  NULL, AlgorithmDlgProc );

 switch( nResult )
 {
 case -1: // User canceled dialog box
  return;

 case 0: // User selected DS3DALG_NO_VIRTUALIZATION 
  guid3DAlgorithm = DS3DALG_NO_VIRTUALIZATION;
  break;

 case 1: // User selected DS3DALG_HRTF_FULL 
  guid3DAlgorithm = DS3DALG_HRTF_FULL;
  break;

 case 2: // User selected DS3DALG_HRTF_LIGHT
  guid3DAlgorithm = DS3DALG_HRTF_LIGHT;
  break;
 }


AlgorithmDlgProc 消息回调函数


INT_PTR CALLBACK AlgorithmDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
 // Default is DS3DALG_NO_VIRTUALIZATION for fastest performance
 static int nDefaultRadio = IDC_NO_VIRT_RADIO;

 switch( msg )
 {
 case WM_INITDIALOG:
  // Default is DS3DALG_NO_VIRTUALIZATION for fastest performance
  CheckRadioButton( hDlg, IDC_NO_VIRT_RADIO, IDC_LIGHT_VIRT_RADIO, nDefaultRadio );
  return TRUE; // Message handled

 case WM_COMMAND:

  // 获取BUTTON 的ID号
  switch( LOWORD(wParam) )
  {
  case IDCANCEL:
   EndDialog( hDlg, -1 );
   return TRUE; // Message handled

  case IDOK:
   if( IsDlgButtonChecked( hDlg, IDC_NO_VIRT_RADIO )    == BST_CHECKED )
   {
    nDefaultRadio = IDC_NO_VIRT_RADIO;
    EndDialog( hDlg, 0 );
   }

   if( IsDlgButtonChecked( hDlg, IDC_HIGH_VIRT_RADIO )  == BST_CHECKED )
   {              
    nDefaultRadio = IDC_HIGH_VIRT_RADIO;
    EndDialog( hDlg, 1 );
   }

   if( IsDlgButtonChecked( hDlg, IDC_LIGHT_VIRT_RADIO ) == BST_CHECKED )
   {              
    nDefaultRadio = IDC_LIGHT_VIRT_RADIO;
    EndDialog( hDlg, 2 );
   }

   return TRUE; // Message handled
  }
  break;
 }

 return FALSE; // Message not handled
}

    So easy,很简单吧,对于一些参数设置窗体有时候还是很值得借鉴的,不仅代码量少,而且容易维护。不过这种做法,打破了“对象”设计思想,编码时尽量少用全局变量还是不碍事的!

目录
相关文章
|
SQL Java
如何使用阿里云短信服务实现登录页面,手机验证码登录?1
如何使用阿里云短信服务实现登录页面,手机验证码登录?
883 0
|
搜索推荐 机器学习/深度学习 算法
如何增加用户的参与感?交互式推荐来了!
一方面,互动能让用户感受到更多的参与感,并能一定程度上干预推荐结果,而不只是被动接受推荐结果;另一方面,系统通过与用户的互动能更加了解用户的偏好,从而提升推荐效果。那么,我们是如何让用户和推荐系统互动起来的呢?且看下文。
4818 0
|
网络协议 网络架构
|
存储 安全 测试技术
数组越界:深入理解、危害与防范
数组越界:深入理解、危害与防范
2773 18
|
设计模式 编解码 API
Flutter UI设计模式与实现:深入探索与实践
【7月更文挑战第20天】Flutter以其独特的声明式UI模式和丰富的UI组件库,为移动应用开发提供了强大的支持。通过深入理解Flutter的UI设计模式和实现技巧,开发者可以构建出高性能、可维护性强的UI界面。同时,随着Flutter生态的不断完善和发展,相信未来Flutter将在移动应用开发领域发挥更加重要的作用。
|
存储
数据结构课程设计--航空客运订票系统
数据结构课程设计--航空客运订票系统
778 0
数据结构课程设计--航空客运订票系统
|
网络协议 Linux
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
|
机器学习/深度学习 人工智能 开发者
关于阿里云的图像搜索的创建和使用
关于阿里云的图像搜索的创建和使用
关于阿里云的图像搜索的创建和使用
|
存储 NoSQL MongoDB
mongodb搭建Replica Set
mongodb搭建Replica Set 简单高效
350 0