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

本文介绍了一种简化对话框参数设置的方法,通过使用GetDlgXXX函数替代传统的类对象方式,使得参数获取更为简便且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值