最近写个小程序需要实现一个类似IP拔号的功能,从联系人菜单中选择联系人,如果这个联系人有多个电话号码,则让用户选择一个并拔号。
其实这个选择的对话框不用自己写,Windows早为我们准备好了。见代码,代码很简单我就不解释了!!
/*
* 获取指定联系人的单个电话号码,如果只有一个电话号码则直接返回。
* oidContactID为联系人的ID
*/
String SelectPhoneNumber(CEOID oidContactID,HWND hwndOwner,LPCTSTR lpstrTitle,LPCTSTR lpstrChoosePropertyText)
{
const CEPROPID all_phone = PIMPR_ALL_PHONE;
CHOOSECONTACT cConct;
cConct.cbSize = sizeof (CHOOSECONTACT);
cConct.hwndOwner = hwndOwner;
cConct.dwFlags = CCF_CHOOSEPROPERTYONLY | CCF_RETURNPROPERTYVALUE;
cConct.lpstrTitle = lpstrTitle;
cConct.lpstrChoosePropertyText = lpstrChoosePropertyText;
cConct.rgpropidRequiredProperties =& all_phone;
cConct.cRequiredProperties = 1 ;
cConct.oidContactID = oidContactID;
if (S_OK != ChooseContact( & cConct)) return TEXT( "" );
String strRetn = String(cConct.bstrPropertyValueSelected);
SysFreeString(cConct.bstrPropertyValueSelected);
return strRetn;
}
* 获取指定联系人的单个电话号码,如果只有一个电话号码则直接返回。
* oidContactID为联系人的ID
*/
String SelectPhoneNumber(CEOID oidContactID,HWND hwndOwner,LPCTSTR lpstrTitle,LPCTSTR lpstrChoosePropertyText)
{
const CEPROPID all_phone = PIMPR_ALL_PHONE;
CHOOSECONTACT cConct;
cConct.cbSize = sizeof (CHOOSECONTACT);
cConct.hwndOwner = hwndOwner;
cConct.dwFlags = CCF_CHOOSEPROPERTYONLY | CCF_RETURNPROPERTYVALUE;
cConct.lpstrTitle = lpstrTitle;
cConct.lpstrChoosePropertyText = lpstrChoosePropertyText;
cConct.rgpropidRequiredProperties =& all_phone;
cConct.cRequiredProperties = 1 ;
cConct.oidContactID = oidContactID;
if (S_OK != ChooseContact( & cConct)) return TEXT( "" );
String strRetn = String(cConct.bstrPropertyValueSelected);
SysFreeString(cConct.bstrPropertyValueSelected);
return strRetn;
}