WEB开发网
开发学院软件开发VC MFC教程(12)-- 对话框和对话框类CDialog(2)... 阅读

MFC教程(12)-- 对话框和对话框类CDialog(2)

 2010-03-25 20:34:58 来源:WEB开发网   
核心提示:上述DDX_TEXT用来在编辑框和long类型的数据成员之间交换数据,MFC提供了DDX_TEXT的多个重载函数处理编辑框和不同类型的数据成员之间的数据交换,MFC教程(12)-- 对话框和对话框类CDialog(2)(4),void AFXAPI DDX_LBString(CDataExchange* pDX, in

上述DDX_TEXT用来在编辑框和long类型的数据成员之间交换数据。MFC提供了DDX_TEXT的多个重载函数处理编辑框和不同类型的数据成员之间的数据交换。

void AFXAPI DDX_LBString(CDataExchange* pDX, int nIDC,CString& value)
{
//得到列表框句柄
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
if (pDX->m_bSaveAndValidate)//TRUE,读取数据
{
//确定列表框当前被选择的条目
int nIndex = (int)::SendMessage(hWndCtrl, LB_GETCURSEL, 0, 0L);
if (nIndex != -1) //列表框有一个条目被选中
{
//得到当前条目的长度
int nLen = (int)::SendMessage(hWndCtrl, LB_GETTEXTLEN, nIndex, 0L);
//读取当前条目的内容到value中
::SendMessage(hWndCtrl, LB_GETTEXT, nIndex,
(LPARAM)(LPVOID)value.GetBufferSetLength(nLen));
}
else //当前列表框没有条目被选中
{
value.Empty();
}
value.ReleaseBuffer();
}
else//FALSE,写内容到列表框
{
// 把value字符串写入当前选中的条目
if (::SendMessage(hWndCtrl, LB_SELECTSTRING,
(WPARAM)-1,(LPARAM)(LPCTSTR)value) == LB_ERR)
{
// no selection match
TRACE0("Warning: no listbox item selected.
");
}
}
}

DDX_LBString用来在列表框和CString类型的成员数据之间交换数据。首先,得到列表框的句柄,然后,调用Win32的列表框操作函数读取或者修改列表框的内容。---www.bianceng.cn

下面的DDX_Control用于得到一个有效的控制类型窗口对象(MFC对象)。

void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl)
{
if (rControl.m_hWnd == NULL) // 还没有子类化
{
ASSERT(!pDX->m_bSaveAndValidate);
//得到控制窗口句柄
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
//把hWndCtrl窗口和MFC窗口对象rControl捆绑在一起
if (!rControl.SubclassWindow(hWndCtrl))
{
ASSERT(FALSE); //不允许两次子类化
AfxThrowNotSupportedException();
}
#ifndef _AFX_NO_OCC_SUPPORT//OLE控制相关的操作
else
{
// If the control has reparented itself (e.g., invisible control),
// make sure that the CWnd gets properly wired to its control site.
if (pDX->m_pDlgWnd->m_hWnd != ::GetParent(rControl.m_hWnd))
rControl.AttachControlSite(pDX->m_pDlgWnd);
}
#endif //!_AFX_NO_OCC_SUPPORT
}
}

DDX_Control用来把控制窗口(Windows窗口)和一个对话框成员(MFC窗口对象)捆绑在一起,这个过程是通过SubclassWindow函数完成的。这样,程序员就可以通过成员变量来操作控制窗口,读、写、修改控制窗口的内容。

MFC还提供了许多其他数据交换函数(“DDX_”为前缀)和数据验证函数(“DDV_”为前缀)。DDV函数和DDX函数类似,这里不再多述。

程序员可以创建自己的数据交换和验证函数并使用它们,可以手工加入这些函数到DoDataExchange中,如果要Classwizard使用这些函数,可以修改DDX.CLW文件,在DDX、DDV函数入口中加入自己创建的函数。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:MFC 教程 对话框

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接