1.CDataExchange没有基类。
CDataExchange支持Microsoft基本类使用的对话数据交换(DDX)和对话框数据验证(DDV)例程。当要为自定义数据类型或控件写数据交换例程和数据验证例程时使用这个类。CDataExchange对象提供了发生DDX和DDX所需要的上下文信息。DDX用于填充来自数据成员到对话控件的初始值时,标记m_bSaveAndValidate为FALSE。如果DDX用来设置对话控件的当前值到数据成员并且用DDV验证数据值有效性,标志m_bSaveAndValidate为TRUE。如果DDV有效性失败,DDV过程将显示解释输入错误的消息框。然后DDV调用Fail重设置到违规控件的焦点,并产生一个异常终止有效性过程。
头文件:#include <afxwin.h>
2.AfxGetApp
函数原型:CWinApp* AFXAPI AfxGetApp( );
注意:这个函数返回的指针可以被用来访问应用程序的信息,比如主消息调度代码以及顶层窗口等。
例子:// Print the application's executable filename.
TRACE("Executable filename = %s\n", AfxGetApp()->m_pszExeName);
剖析:AfxGetApp( )是全局的。
AfxGetApp( )这个函数可以得到当前应用进程的指针,是CWinApp*类型的,通过这个指针可以访问到这个进程中的对象。
比如在全局函数中要向对话框中的列表写数据。
void writeString(char* pString)
CWnd* pWnd = AfxGetApp()->GetMainWnd(); CMyDlg * pDlg; pDlg=(CMyDlg *) pWnd; pDlg->ShowMsg(pString);
}
AfxGetApp()得到进程指针CWinApp*,通过这个指针可以得到pWnd。要不在全局函数里你怎么对已存在的对话框操作呢。AfxGetApp( )这个函数可以得到当前引用的指针CWinApp*,通过这个指针可以访问到这个进程中的对象。
AFX_MANAGE_STATE(AfxGetStaticModuleState()) |
// switch thread state back to application _AFX_THREAD_STATE* pState = AfxGetThreadState(); AfxSetModuleState(pState->m_pPrevModuleState); // do something with the application AfxGetApp()->... // switch thread state back to dll AFX_MANAGE_STATE(AfxGetStaticModuleState()) |
3.BROWSEINFO
Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。
(1)BROWSEINFO结构
●定义
typedef struct_browseinfo
{
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;