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

简介:      在很多情况下,我们为了获取对话框设置的一些参数,通常都是通过类对象中成员来获取,或者直接获取退出时最后点击的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,很简单吧,对于一些参数设置窗体有时候还是很值得借鉴的,不仅代码量少,而且容易维护。不过这种做法,打破了“对象”设计思想,编码时尽量少用全局变量还是不碍事的!

目录
相关文章
|
3月前
|
JavaScript
如何写事件冒泡和事件捕捉?
如何写事件冒泡和事件捕捉?
|
缓存 Windows
Windows程序设计——LoadImage参数及其用法
Windows程序设计——LoadImage参数及其用法
400 0
|
4月前
|
小程序
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
57 0
|
7月前
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
42 0
|
10月前
|
消息中间件 存储 API
事件,消息,消息处理函数,第一个图形界面程序(附带官方解释链接)
事件,消息,消息处理函数,第一个图形界面程序(附带官方解释链接)
|
程序员
回调函数实现四则运算器(可增添功能)
本文讲解:回调函数实现四则运算器(可增添功能)
|
JavaScript 前端开发
简单解析事件捕捉
简单解析事件捕捉 上篇博客说到了事件冒泡,其实在JavaScript中,说到事件冒泡还有两个个不得不提的事件捕获和默认事件,我们先来说一下事件捕获。效果如下图: 在这里插入图片描述 HTML代码: <div class="box1"> <div class="box2"> <div class="box3"> <div class="box4"></div> </div> </div> </div> 1 2 3 4 5
简单解析事件捕捉
|
存储 文件存储
【课堂笔记】VB 自定义过程sub,消息窗体的输入输出,断点调试方法
【课堂笔记】VB 自定义过程sub,消息窗体的输入输出,断点调试方法
379 0
从零开始学Pyqt5之【如何解决自定义槽函数需要参数而信号没有参数传递的问题?(2种方式)】
从零开始学Pyqt5之【如何解决自定义槽函数需要参数而信号没有参数传递的问题?(2种方式)】

热门文章

最新文章