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

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

目录
相关文章
|
8月前
|
iOS开发 MacOS
LabVIEW如何使用热键去触发自定义的事件
LabVIEW如何使用热键去触发自定义的事件
165 1
|
3月前
|
前端开发 Java API
vertx学习总结5之回调函数及其限制,如网关/边缘服务示例所示未来和承诺——链接异步操作的简单模型响应式扩展——一个更强大的模型,特别适合组合异步事件流Kotlin协程
本文是Vert.x学习系列的第五部分,讨论了回调函数的限制、Future和Promise在异步操作中的应用、响应式扩展以及Kotlin协程,并通过示例代码展示了如何在Vert.x中使用这些异步编程模式。
64 5
vertx学习总结5之回调函数及其限制,如网关/边缘服务示例所示未来和承诺——链接异步操作的简单模型响应式扩展——一个更强大的模型,特别适合组合异步事件流Kotlin协程
|
8月前
LabVIEW使用多个事件结构来处理同一个事件
LabVIEW使用多个事件结构来处理同一个事件
239 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
101 0
|
存储 安全 Windows
Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程
Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程
|
程序员
回调函数实现四则运算器(可增添功能)
本文讲解:回调函数实现四则运算器(可增添功能)
按键精灵设计的简单的重复输入动作
按键精灵设计的简单的重复输入动作
112 0
|
存储 文件存储
【课堂笔记】VB 自定义过程sub,消息窗体的输入输出,断点调试方法
【课堂笔记】VB 自定义过程sub,消息窗体的输入输出,断点调试方法
433 0
从零开始学Pyqt5之【如何解决自定义槽函数需要参数而信号没有参数传递的问题?(2种方式)】
从零开始学Pyqt5之【如何解决自定义槽函数需要参数而信号没有参数传递的问题?(2种方式)】