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

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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……………………………………………………………

           


…………………………………………………………Page 686……………………………………………………………

           


…………………………………………………………Page 687……………………………………………………………

                                 



附表2 ASCII码表 (0~127)  


…………………………………………………………Page 688……………………………………………………………

                                                   



                    附录3 虚拟键码  



             十六进制 

符号常量                 指定的鼠标或键盘按键  

             值  

VK_LBUTTON   01      鼠标左键  

VK_RBUTTON   02      鼠标右键  

VK_CANCEL   03       Control…break 过程   

VK_MBUTTON   04      鼠标中键  

             05 07    未定义   

?              ? 

VK_BACK     08       BACKSPACE 键   

VK_TAB      09       TAB 键   

?            0A?0B    未定义   

VK_CLEAR     0C      CLEAR 键   

VK_RETURN    0D      ENTER 键   

?            0E?0F    未定义   

VK_SHIFT    10       SHIFT 键   


…………………………………………………………Page 689……………………………………………………………

VK_CONTROL   11      CTRL 键   

VK_MENU      12      ALT 键   

VK_PAUSE     13      PAUSE 键   

VK_CAPITAL   14      CAPS LOCK 键   

?            15?19    为 Kanji 系统保留   

?            1A      未定义   

VK_ESCAPE    1B      ESC 键   

?            1C?1F    为 Kanji 系统保留   

VK_SPACE     20      SPACEBAR   

VK_PRIOR     21      PAGE UP 键   

VK_NEXT      22      PAGE DOWN 键   

VK_END       23      END 键   

VK_HOME      24      HOME 键   

VK_LEFT      25      LEFT ARROW 键   

VK_UP        26      UP ARROW 键   

VK_RIGHT     27      RIGHT ARROW 键   

VK_DOWN      28      DOWN ARROW 键   

VK_SELECT    29      SELECT 键   

?            2A      由OEM厂商指定  

VK_EXECUTE   2B      EXECUTE 键   

                     PRINT    SCREEN键 (用于Windows  

VK_SNAPSHOT  2C   

                     3。0及以后版本)   

VK_INSERT    2D      INS 键   

VK_DELETE    2E      DEL 键   

VK_HELP      2F      HELP 键   

VK_0         30      0 键   

VK_1         31      1 键   

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