友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第141章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!





// InputDlg。h : 头文件  



//  



// 以下对话框 ID 常量需要手动添加  



#define IDC_EDIT 1000  



#define IDC_PROMPT 1001  



#define IDD_INPUT 129  



/////////////////////////////////////////////////////////////////////////////  



// CInputDlg 对话框  



class __declspec(dllexport) CInputDlg : public CDialog  



{  


…………………………………………………………Page 677……………………………………………………………

// 构造  



public:  



CString GetInput(CString Title; CString Prompt);  



CInputDlg(CWnd* pParent = NULL); // 标准构造函数  



// 对话框数据  



//{{AFX_DATA(CInputDlg)  



enum { IDD = IDD_INPUT };  



CString m_strTitle;  



CString m_strPrompt;  



CString m_strInput;  



//}}AFX_DATA  



    



// 重载  



// 由 ClassWizard 生成的虚函数重载  



//{{AFX_VIRTUAL(CInputDlg)  



protected:  



virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持  



//}}AFX_VIRTUAL  



// 实现  



protected:  



// 生成的消息映射函数  



//{{AFX_MSG(CInputDlg)  



virtual BOOL OnInitDialog();  



//}}AFX_MSG  



DECLARE_MESSAGE_MAP()  



};  


…………………………………………………………Page 678……………………………………………………………

//{{AFX_INSERT_LOCATION}}  



// Microsoft Developer Studio 将在紧贴上一行之前的位置添加附加的声明  



#endif // !defined 

(AFX_INPUTDLG_H__02DB98CF_1F76_11D2_971A_0000B4810A31__INCLUDED_)  



// InputDlg。cpp : 实现文件  



//  



#include 〃stdafx。h〃  



#include 〃InputDlg。h〃  



#ifdef _DEBUG  



#define new DEBUG_NEW  



#undef THIS_FILE  



static char THIS_FILE'' = __FILE__;  



#endif  



/////////////////////////////////////////////////////////////////////////////  



// CInputDlg dialog  



    



CInputDlg::CInputDlg(CWnd* pParent /*=NULL*/)  



: CDialog(CInputDlg::IDD; pParent)  



{  



//{{AFX_DATA_INIT(CInputDlg)  



m_strInput = _T(〃〃);  



//}}AFX_DATA_INIT  



}  



    



void CInputDlg::DoDataExchange(CDataExchange* pDX)  



{  



CDialog::DoDataExchange(pDX);  


…………………………………………………………Page 679……………………………………………………………

//{{AFX_DATA_MAP(CInputDlg)  



DDX_Text(pDX; IDC_EDIT; m_strInput);  



//}}AFX_DATA_MAP  



}  



    



BEGIN_MESSAGE_MAP(CInputDlg; CDialog)  



//{{AFX_MSG_MAP(CInputDlg)  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CInputDlg message handlers  



CString CInputDlg::GetInput(CString Title; CString Prompt)  



{  



CString str(〃〃); // 注意:这里对 CString 对象 str 的初始化是必要,否则  



// 在后面的过程将会出错  



// 对标题条和提示文本的实际的更新将在消息处理函数 OnInitDialog 中进行  



m_strTitle=Title;  



m_strPrompt=Prompt;  



if (DoModal()==IDOK)  



{  



// 如果用户单击了确定,则返回所输入的字符串  



str=m_strInput;  



}  



return str;  



}  



BOOL CInputDlg::OnInitDialog()   


…………………………………………………………Page 680……………………………………………………………

{  



CDialog::OnInitDialog();  



// 使用用户指定的标题字符串  



SetWindowText(m_strTitle);  



// 设置提示文本  



GetDlgItem(IDC_PROMPT)…》SetWindowText(m_strPrompt);  



// 将输入焦点设置为 IDC_EDIT 控件  



GetDlgItem(IDC_EDIT)…》SetFocus();  



// 由于将输入焦点设置为 IDC_EDIT 控件,因此 OnInitDialog 成员函数应该返回假值  



return FALSE;  



}  



在示例程序中,我们使用了__declspec(dllexport)来导出类 

CInputDlg,最主要的原因是因为这种方法相对比较简单一些。  



编译DLL工程ExtDllDemo,在Debug 目录下生成了动态链接库 

ExtDllDemo。dll的导入库ExtDllDemo。lib 。  



下面我们创建动态链接库ExtDllDemo。dll的测试工程ExtDllTest。  



1。         使用AppWizard创建基于对话框的EXE工程ExtDllTest,工程 

ExtDllTest使用了动态MFC链接 (这是必须的)。将在前一步中生成的 

ExtDllDemo。lib拷贝到工程ExtDllTest所在的目录下。完成这一步之 

后,从Project菜单下选择Settings命令,在工程的设置对话框中选 

择Link选项卡,在Object/Library                                Modules框中输入 

ExtDllDemo。lib。  



2。 在实现文件ExtDllDemoDlg。cpp的最前面输入下面的代码:  



/////////////////////////////////////////////////////////////////////////////  



// CInputDlg dialog  



class __declspec(dllimport) CInputDlg : public CDialog  



{  



public:  


…………………………………………………………Page 681……………………………………………………………

CString GetInput(CString Title; CString Prompt);  



CInputDlg(CWnd* pParent = NULL);  



};  



上面的代码在工程中定义了类CInputDlg,以便于在以后的代码中使 

用该类。这里需要注意的是,我们只需给出对我们有意义的那些成员 

的声明即可,而没有必须在上面的定义中给出完全的成员声明。  



在OnInitDialog成员函数的//   TODO注释下输入下面的代码。该代码 

在应用程序的主对话框弹出之前询问主对话框的标题文本。  



CInputDlg dlg;  



CString str=dlg。GetInput(〃输入〃; 〃请输入对话框的标题:〃);  



SetWindowText(str);  



  l 注意:  



  l 如果在CInputDlg::GetInput成员函数中没有对对象变量str进行 

   正确的初始化(如直接使用return m_strInput等),那么上面的代 

   码的Debug版本在运行时将会 出现Assertion失败。这种现象的根 

    源在于CString内部所使用的 内存分配方式。由于CString所使用 

    的内存分配方式相当的复杂,因此,我们不在这里深入的讨论这 

   一现象,仅仅指出存在这种问题而已。  



编译并生成应用程序ExtDllTest,然后将动态链接库ExtDllDemo。dll 

拷贝到应用程序ExtDllTest的目录或系统 目录中,再运行 

ExtDllTest,已检验动态链接库ExtDllTest的工作是否正确。  



关于DLL还有很多课题可以研究,但是由于篇幅所限,我们在这里仅 

给出一些最基本的概念和方法,更详细的参考资料可以查阅MFC的联 

机文档。  


…………………………………………………………Page 682……………………………………………………………

附表1 MFC类库层次表  



                                  


…………………………………………………………Page 683……………………………………………………………

           


…………………………………………………………Page 684……………………………………………………………

           


…………………………………………………………Page 685……………………………………………………………

   
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!